He remembered from his bullyinghopefully this will be the start of a Drag'N'Drop Visual Designer tool
I am not finished yet but I think he is better than the built-in ide.
Code: Select all
;PropertyGadget
;
;Befehlsbeschreibung:
; ________________________________________________________________________________________________________________
;| -PropertyGadget_Create(Gadget.i, X.i, Y.i, Width.i, Height.i, ItemHeight.i = 20, BackColor.i = $fcfcfc)|
;|Erstellt ein PropertyGadget an den angegebenen Koordinaten mit der den angegebenen Dimensionen. |
;|Die `ItemHeight` bestimmt die Schriftgrцsse und die Hцhe der Items. |
;|________________________________________________________________________________________________________________|
;| -PropertyGadget_AddItem(Gadget.i, Pos.i, Info.S, Text$, Type) |
;|Fьgt einen neuen Eintrag mit der angegebenen Beschreibung und Text hinzu. |
;|Wenn bei `Pos` -1 angegeben wird, dann wird der Eintrag am Ende der Liste eingefьgt. |
;|________________________________________________________________________________________________________________|
;| -PropertyGadget_AddComboItem(Gadget.i, Item.i, Text$) |
;|Fьgt dem angegebenen Eintrag ein Combobox-Item hinzu |
;|________________________________________________________________________________________________________________|
;| -PropertyGadget_GetItemText(Gadget.i, Item.i) |
;|Ermittelt den Text des angegebenen Items. |
;|________________________________________________________________________________________________________________|
;| -PropertyGadget_SetItemText(Gadget.i, Item.i, Text$) |
;|Дndert den Text des angegebenen Items. |
;|________________________________________________________________________________________________________________|
;| -PropertyGadget_Refresh(Gadget.i, WindowEvent.i) |
;|Dieser Befehl berechnet und zeichnet das Gadget und sollte in der Hauptschleife aufgerufen werden. |
;|`WindowEvent` wird fьr die Tastendrьcke verwendet. |
;|________________________________________________________________________________________________________________|
;Typeen
#Item_Text = 1
#Item_Combo = 2
Structure _Items
Info.S
Text$
CursorPos.i
IsTextSelected.b
Selected_Text.S
CursorMovePos.i
Seperator.i
SeperatorText.S
SeperatorFont.i
Type.i
AktuellesComboItem.i
List ComboItems.s()
EndStructure
Structure _PropertyGadget
Gadget.i
X.i
Y.i
Width.i
GesWidth.i
Height.i
ItemHeight.i
BackColor.i
Font.i
SelectedItem.i
Focus.i
ScrollBar.i
LineClick.i
LinePos.i
EnterItem.i
List Items._Items()
EndStructure
Procedure.s RemoveStringSign(String$, Pos.i)
Left$ = Left(String$, Pos)
Right$ = Right(String$, Len(String$)-(Pos+1))
ProcedureReturn Left$+Right$
EndProcedure
Global NewMap *gadgetData()
Procedure _setGadgetData(Gadget, *data)
*gadgetData(Str(Gadget)) = *data
EndProcedure
Procedure _getGadgetData(Gadget)
ProcedureReturn *gadgetData(Str(Gadget))
EndProcedure
Procedure PropertyGadget_Create(Gadget.i, X.i, Y.i, Width.i, Height.i, ItemHeight.i = 20, LinePos = 90, BackColor.i = $F9F9F9)
*Property._PropertyGadget = AllocateMemory(SizeOf(_PropertyGadget))
If *Property
InitializeStructure(*Property, _PropertyGadget)
*Property\X = X
*Property\Y = Y
*Property\Width = Width-20
*Property\GesWidth = Width
*Property\Height = Height
*Property\LinePos = LinePos
*Property\ItemHeight = ItemHeight
*Property\BackColor = BackColor
*Property\Font = LoadFont(#PB_Any, "Anonymous Pro Minus", ItemHeight*0.5, #PB_Font_HighQuality);Consolas
*Property\ScrollBar = ScrollBarGadget(#PB_Any, Width-20, Y, 20, Height, 0, 210, Height, #PB_ScrollBar_Vertical)
GadgetID = CanvasGadget(Gadget, X, Y, Width-20, Height, #PB_Canvas_Keyboard) :If Gadget = #PB_Any :Gadget = GadgetID :EndIf
*Property\Gadget = Gadget
_setGadgetData(Gadget, *Property)
ProcedureReturn Gadget
EndIf
EndProcedure
Procedure PropertyGadget_AddItem(Gadget.i, Pos.i, Info.S, Text$, Type.i = #PB_GadgetType_String)
*Property._PropertyGadget = _getGadgetData(Gadget)
If *Property
With *Property
If Pos >= 0 ; Если явно указали итем
If Pos >= ListSize(\Items()) ; Проверка есть ли такой итем, если нет
AddElement(\Items()) ; Добавляем итем, после всех итемов
Else ; Если есть
SelectElement(\Items(), Pos) ; Выбираем итем и заменяем его
EndIf
ElseIf Pos = -1 ; Если явно не указан итем
LastElement(\Items()) ; Выбираем последный элемент и
AddElement(\Items()) ; Добавляем после него
EndIf
\Items()\Info.S = Info.S+": "
\Items()\Text$ = Text$
\Items()\Selected_Text = Text$
\Items()\Type = Type
\Items()\CursorMovePos = -1 ;
\Items()\IsTextSelected = 0 ;
\Items()\CursorPos = 0 ;
SetGadgetAttribute(\ScrollBar, #PB_ScrollBar_Maximum, \ItemHeight * ListSize(\Items())+10)
SetGadgetAttribute(\ScrollBar, #PB_ScrollBar_PageLength, \Height)
If \Height > \ItemHeight * ListSize(\Items())+10
\Width = \GesWidth
ResizeGadget(\ScrollBar, \Width, #PB_Ignore, 0, #PB_Ignore)
Else
\Width = \GesWidth-20
ResizeGadget(\ScrollBar, \Width+5, #PB_Ignore, 20, #PB_Ignore)
EndIf
ResizeGadget(\Gadget, #PB_Ignore, #PB_Ignore, \Width, #PB_Ignore)
SetGadgetData(\Gadget, *Property)
EndWith
EndIf
EndProcedure
Procedure PropertyGadget_AddComboItem(Gadget.i, Item.i, Text$)
*Property._PropertyGadget = _getGadgetData(Gadget)
If *Property
SelectElement(*Property\Items(), Item)
LastElement(*Property\Items()\ComboItems())
AddElement(*Property\Items()\ComboItems())
*Property\Items()\ComboItems() = Text$
SetGadgetData(Gadget, *Property)
EndIf
EndProcedure
Procedure.S PropertyGadget_GetItemText(Gadget.i, Item.i)
*Property._PropertyGadget = _getGadgetData(Gadget)
If *Property
If Item < ListSize(*Property\Items()) And Item >=0
SelectElement(*Property\Items(), Item)
ProcedureReturn *Property\Items()\Text$
EndIf
EndIf
EndProcedure
Procedure PropertyGadget_SetItemText(Gadget.i, Item.i, Text$)
*Property._PropertyGadget = _getGadgetData(Gadget)
If *Property
If Item < ListSize(*Property\Items()) And Item >=0
SelectElement(*Property\Items(), Item)
*Property\Items()\Text$ = Text$
SetGadgetData(*Property\Gadget, *Property)
EndIf
EndIf
EndProcedure
Procedure PropertyGadget_AddItemSeparator(Gadget, Text.S, State)
*Property._PropertyGadget = _getGadgetData(Gadget)
If *Property
With *Property
LastElement(\Items()) ; Выбираем последный элемент и
AddElement(\Items()) ; Добавляем после него
; SelectElement(\Items(), ListIndex(\Items())) ; Выбираем итем и заменяем его
Debug \Items()\Text$
\Items()\SeperatorText = Text.S
\Items()\SeperatorFont = LoadFont(#PB_Any, "Anonymous Pro Minus", \ItemHeight*0.7, #PB_Font_HighQuality);Consolas
SetGadgetData(\Gadget, *Property)
EndWith
EndIf
EndProcedure
Procedure PropertyGadget_GetItemState(Gadget, Item.i)
*Property._PropertyGadget = _getGadgetData(Gadget)
If *Property
If Item < ListSize(*Property\Items()) And Item >=0
SelectElement(*Property\Items(), Item)
ProcedureReturn *Property\Items()\AktuellesComboItem
EndIf
EndIf
EndProcedure
Procedure PropertyGadget_Timer( Milliseconds )
Static Delay, Result
If Delay = #False :Delay = ElapsedMilliseconds() :EndIf
If ((ElapsedMilliseconds() - Delay) >= (Milliseconds*2))
Delay = 0
Result ! 1
EndIf
ProcedureReturn Result
EndProcedure
Procedure Arrow(X1,Y1,Direction = - 1,ArrowLineWidth = 2, Size = 4, ArrowColor = 0)
Protected I
X1 = X1 + Size*2
DrawingMode(#PB_2DDrawing_Default)
For i = 1 To Size
If Direction = 1
; верх
LineXY(((X1-(1))+i),(Y1+i),((X1-(1))+i),(Y1+i)+ArrowLineWidth,ArrowColor )
LineXY(((X1+(1))-i),(Y1+i),((X1+(1))-i),(Y1+i)+ArrowLineWidth,ArrowColor )
ElseIf Direction = - 1
; вниз
LineXY(((X1-Size)+i),(Y1+i),((X1-Size)+i),(Y1+i)+ArrowLineWidth,ArrowColor )
LineXY(((X1+Size)-i),(Y1+i),((X1+Size)-i),(Y1+i)+ArrowLineWidth,ArrowColor )
EndIf
Next
EndProcedure
Procedure PropertyGadget_Refresh(Gadget.i, WindowEvent.i)
Protected CharWidth = 7
Protected UpDownWidth = 15
Static Popupmenu.i, ScrollPos
Protected EnterItem
*Property._PropertyGadget = _getGadgetData(Gadget)
If *Property
With *Property
If WindowEvent = #PB_Event_Gadget And EventGadget() = \Gadget
; Только на сушествующих итемах
If ListSize(\Items()) -1 >= (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY)+GetGadgetState(\ScrollBar)) / \ItemHeight
Select EventType()
Case #PB_EventType_Input :SelectElement(\Items(), \SelectedItem)
If \Items()\IsTextSelected
If \Items()\CursorPos > \Items()\CursorMovePos
\Items()\Text$ = RemoveString( \Items()\Text$ ,\Items()\Selected_Text,#PB_String_CaseSensitive,\Items()\CursorMovePos,1)
If \Items()\CursorMovePos >= 0
\Items()\CursorPos = \Items()\CursorMovePos ; Место куда добавлят буквы
EndIf
Else
\Items()\Text$ = RemoveString( \Items()\Text$ ,\Items()\Selected_Text,#PB_String_CaseSensitive,\Items()\CursorPos,1)
EndIf
\Items()\CursorMovePos = -1
\Items()\IsTextSelected = #False
EndIf
If \Items()\Type = #PB_GadgetType_Spin
Select GetGadgetAttribute(\Gadget, #PB_Canvas_Input)
Case '0' To '9'
\Items()\CursorPos + (1) :\Items()\Text$ = InsertString(\Items()\Text$, Chr(GetGadgetAttribute(\Gadget, #PB_Canvas_Input)), \Items()\CursorPos)
EndSelect
Else
\Items()\CursorPos + (1) :\Items()\Text$ = InsertString(\Items()\Text$, Chr(GetGadgetAttribute(\Gadget, #PB_Canvas_Input)), \Items()\CursorPos)
EndIf
Case #PB_EventType_LeftButtonDown
SelectElement(\Items(), (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY)+GetGadgetState(\ScrollBar))/\ItemHeight)
If \Items()\SeperatorText = ""
; Если текст выделен убираем выделение
SelectElement(\Items(), \SelectedItem) :\Items()\IsTextSelected = #False :\Items()\CursorMovePos = -1
; Чтобы при первом клике выделить техт
If \SelectedItem <> (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY)+GetGadgetState(\ScrollBar))/\ItemHeight
; Если не на сплиттере то выделяем
If GetGadgetAttribute(\Gadget, #PB_Canvas_Cursor) ! #PB_Cursor_LeftRight
\SelectedItem = (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY)+GetGadgetState(\ScrollBar))/\ItemHeight
SelectElement(\Items(), \SelectedItem ) :\Items()\IsTextSelected = #True ; Отмечаем что техт выделен
\Items()\CursorPos = Len(\Items()\Text$) ; Перемещаем коректор в конец текста
EndIf
Else
; Положение коректора в тексте
If ( \LinePos ) < GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) And
(\Width - UpDownWidth - 5 ) > GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX)
If \Items()\IsTextSelected = #False
; Позиция коректора
If GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) >\LinePos
If (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX)< \LinePos + (Len(\Items()\Text$) * CharWidth ))
\Items()\CursorPos = (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX)-\LinePos ) / CharWidth
Else
\Items()\CursorPos = Len(\Items()\Text$)
EndIf
Else
\Items()\CursorPos = 0
EndIf
\Items()\CursorMovePos = \Items()\CursorPos
\Items()\IsTextSelected = #True
EndIf
EndIf
EndIf
EndIf
Case #PB_EventType_LeftDoubleClick
If GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) < (\Width - UpDownWidth - 5)
SelectElement(\Items(), \SelectedItem) :\Items()\IsTextSelected = #True
\Items()\CursorPos = Len(\Items()\Text$)
\Items()\CursorMovePos = -1
EndIf
Case #PB_EventType_LeftClick
If (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY)-5)/\ItemHeight < ListSize(\Items())
If GetGadgetAttribute(\Gadget, #PB_Canvas_Cursor) ! #PB_Cursor_LeftRight
\SelectedItem = (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY)+GetGadgetState(\ScrollBar))/\ItemHeight
SelectElement(\Items(), \SelectedItem)
EndIf
If \Items()\Type = #PB_GadgetType_Spin And GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) > (\Width - UpDownWidth)
If (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY) ) < ListIndex(\Items())*\ItemHeight + \ItemHeight>>1
\Items()\Text$ = Str(Val(\Items()\Text$)+1)
Else
\Items()\Text$ = Str(Val(\Items()\Text$)-1)
EndIf
EndIf
EndIf
Case #PB_EventType_MouseMove
If \Items()\SeperatorText = ""
EnterItem = (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseY)+GetGadgetState(\ScrollBar)) / \ItemHeight
If \EnterItem ! EnterItem :\EnterItem = EnterItem :EndIf
If GetGadgetAttribute(\Gadget, #PB_Canvas_Buttons) = #False
If GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) > \LinePos - 3
If GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) < \LinePos + 3
SetGadgetAttribute(\Gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftRight)
Else
If \Items()\Type = #PB_GadgetType_String
SetGadgetAttribute(\Gadget, #PB_Canvas_Cursor, #PB_Cursor_IBeam)
Else
If GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) < (\Width - UpDownWidth)
SetGadgetAttribute(\Gadget, #PB_Canvas_Cursor, #PB_Cursor_IBeam)
Else
SetGadgetAttribute(\Gadget, #PB_Canvas_Cursor, #PB_Cursor_Default)
EndIf
EndIf
EndIf
Else
SetGadgetAttribute(\Gadget, #PB_Canvas_Cursor, #PB_Cursor_Default)
EndIf
; Если нажали на кнопку мыши
ElseIf GetGadgetAttribute(\Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton
; Если находимся на сплиттере
If GetGadgetAttribute(\Gadget, #PB_Canvas_Cursor) = #PB_Cursor_LeftRight
\LinePos = GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX)
\EnterItem = -1
Else
; Выбираем текущий элемент под курсором
SelectElement(\Items(), \EnterItem)
If \Items()\IsTextSelected = #True
; Позиция коректора
If GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) > \LinePos
If (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX) < \LinePos + (Len(\Items()\Text$) * CharWidth ))
\Items()\CursorPos = (GetGadgetAttribute(\Gadget, #PB_Canvas_MouseX)-\LinePos ) / CharWidth
Else
\Items()\CursorPos = Len(\Items()\Text$)
EndIf
Else
\Items()\CursorPos = 0
EndIf
EndIf
EndIf
EndIf
EndIf
Case #PB_EventType_MouseEnter
SetActiveGadget(\Gadget)
Case #PB_EventType_MouseLeave
\EnterItem = -1
Case #PB_EventType_KeyDown
Select ( GetGadgetAttribute( \Gadget, #PB_Canvas_Key ) )
Case #PB_Shortcut_Up :If \SelectedItem > 0 : \SelectedItem-1 : EndIf
Case #PB_Shortcut_Down :If \SelectedItem < (ListSize(\Items()) - (1)) :\SelectedItem + (1) : EndIf
Case #PB_Shortcut_Left :If \Items()\CursorPos > 0 :\Items()\CursorPos - (1) : EndIf
Case #PB_Shortcut_Right :If \Items()\CursorPos < Len( \Items()\Text$ ) :\Items()\CursorPos + (1) : EndIf
Case #PB_Shortcut_Back : If \Items()\CursorPos > 0 And (\Items()\Type = #PB_GadgetType_String Or \Items()\Type = #PB_GadgetType_Spin) : \Items()\Text$ = RemoveStringSign(\Items()\Text$, \Items()\CursorPos-1) : \Items()\CursorPos -1 : EndIf
EndSelect
EndSelect
Else
\EnterItem = -1
EndIf
EndIf
Protected ItemVisibleHeight = \ItemHeight +1
Protected Lenght, CursorPos
If StartDrawing(CanvasOutput(\Gadget))
DrawingMode(#PB_2DDrawing_Default) :Box(0, 0, \Width, \Height, \BackColor)
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent) :Box(0, 0, \Width, \Height, $52150D)
DrawingFont(FontID(\Font))
ScrollPos = GetGadgetState(\ScrollBar)
PushListPosition(\Items())
ForEach \Items()
Y = ListIndex(\Items())*\ItemHeight
If ListIndex(\Items()) = \SelectedItem
If \Items()\SeperatorText = ""
farbe = \BackColor
DrawingMode(#PB_2DDrawing_Default)
Box(1, Y-ScrollPos, \Width-2, ItemVisibleHeight)
Box(1, Y-ScrollPos+1, \LinePos-1, ItemVisibleHeight-2, $FF9933);$4576EF);
Protected TopColor = RGB(240, 240, 240)
Protected BottomColor = RGB(229, 229, 229)
Protected X
Protected Y1
Protected Width
Protected Height
X = \Width-UpDownWidth - 2
Y1 = (Y-ScrollPos);+(ItemVisibleHeight>>1-2)-1
Width = UpDownWidth
Height = ItemVisibleHeight;(ItemVisibleHeight>>1-2)
If \Items()\Type = #PB_GadgetType_ComboBox
DrawingMode(#PB_2DDrawing_Gradient)
BackColor(TopColor)
FrontColor(BottomColor)
LinearGradient(X, Y1, X, Height+Y1)
Box(X, Y1, Width, Height)
Arrow(X-1,Y1+(ItemVisibleHeight>>1-2)-1,-1,2,4)
DrawingMode(#PB_2DDrawing_Outlined)
Line(X-1,Y1,1,Height, $FF9933)
ElseIf \Items()\Type = #PB_GadgetType_Spin ; SpinGadget
DrawingMode(#PB_2DDrawing_Gradient)
BackColor(TopColor)
FrontColor(BottomColor)
LinearGradient(X, Y1, X, Height+Y1)
Box(X, Y1, Width, Height)
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
Box(\Width-3-UpDownWidth, Y-ScrollPos+2, UpDownWidth,(ItemVisibleHeight>>1-2), $FF9933)
Box(\Width-3-UpDownWidth, (Y-ScrollPos+(ItemVisibleHeight>>1))+1, UpDownWidth, (ItemVisibleHeight>>1-2), $FF9933)
Arrow(\Width-UpDownWidth-2,Y-ScrollPos+2,1,2,3)
Arrow(\Width-UpDownWidth-2,(Y-ScrollPos+(ItemVisibleHeight>>1))+1,-1,2,3)
EndIf
; Рамка вокруг выделенного итема
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent) :Box(1, Y-ScrollPos, \Width-2, ItemVisibleHeight, $FF9933)
Else
DrawingMode(#PB_2DDrawing_Default)
Box(1, Y-ScrollPos, \Width-2, ItemVisibleHeight)
EndIf
Else
farbe = $101010
If ListIndex(\Items()) = \EnterItem
DrawingMode(#PB_2DDrawing_Default) :Box(1, Y-ScrollPos+1, \Width-2, ItemVisibleHeight-2, $EFD3C6);$4576EF);
EndIf
If \Items()\SeperatorText = ""
; Линии по горизонтали
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent) :Line(1, Y-ScrollPos+\ItemHeight, \Width-2, 1, $BDBDBD)
Else
EndIf
EndIf
; линия по вертикали
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent) :Line(\LinePos, Y-ScrollPos, 1, \ItemHeight, $BDBDBD)
If \Items()\SeperatorText = ""
; Перерисовка текст инфо
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
DrawText(\LinePos-TextWidth(\Items()\Info.S), (Y+(\ItemHeight - TextHeight(\Items()\Info))>>1) - ScrollPos , \Items()\Info, farbe, \BackColor)
Else
DrawingMode(#PB_2DDrawing_Default)
Box(1, Y-ScrollPos, \Width-2, ItemVisibleHeight, $E6E6E6)
DrawingFont(FontID(\Items()\SeperatorFont))
; Перерисовка текст инфо
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
DrawText(\LinePos-TextWidth(\Items()\SeperatorText.S), (Y+(\ItemHeight - TextHeight(\Items()\SeperatorText))>>1) - ScrollPos , \Items()\SeperatorText, farbe, \BackColor)
DrawingFont(FontID(\Font))
EndIf
; Перерисовка текст итема
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
DrawText(\LinePos+5, (Y+(\ItemHeight - TextHeight(\Items()\Info))>>1) - ScrollPos+1, \Items()\Text$, $101010, \BackColor)
If ListIndex(\Items()) = \SelectedItem
If \Items()\SeperatorText = ""
; Перерисовка выделения текста
If \Items()\IsTextSelected
\Items()\Selected_Text = \Items()\Text$ ; Выделеный текст по умолчанию
DrawingMode(#PB_2DDrawing_Default)
If \Items()\CursorMovePos >= 0
If \Items()\CursorMovePos < \Items()\CursorPos
CursorPos = \Items()\CursorMovePos
Lenght = \Items()\CursorPos-\Items()\CursorMovePos
Else ; Если выделяем на лево
CursorPos = \Items()\CursorPos
Lenght = \Items()\CursorMovePos-\Items()\CursorPos
EndIf
\Items()\Selected_Text = Mid(\Items()\Text$, CursorPos + (1), Lenght)
Box(\LinePos+5 + (CursorPos * CharWidth), 3+Y-ScrollPos, TextWidth(Left(\Items()\Text$, Lenght)), ItemVisibleHeight-6, $FF9933)
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
DrawText(\LinePos+5 + (CursorPos * CharWidth), (Y+(\ItemHeight - TextHeight(\Items()\Info))>>1) - ScrollPos+1, \Items()\Selected_Text, \BackColor, \BackColor)
Else
Box(\LinePos+5, 3+Y-ScrollPos, TextWidth(Left(\Items()\Text$, \Items()\CursorPos)), ItemVisibleHeight-6, $FF9933)
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
DrawText(\LinePos+5, (Y+(\ItemHeight - TextHeight(\Items()\Info.S))>>1) - ScrollPos+1, \Items()\Text$, \BackColor, \BackColor)
EndIf
EndIf
; Перерисовка коректора
If PropertyGadget_Timer( 300 )
Line(\LinePos+5+TextWidth(Left(\Items()\Text$, \Items()\CursorPos)), 3+Y-ScrollPos, 1, ItemVisibleHeight-6, $202020)
EndIf
EndIf
EndIf
Next
PopListPosition(\Items())
StopDrawing()
EndIf
SetGadgetData(\Gadget, *Property)
EndWith
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 300, 400, "Property Beispiel", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
PropertyGadget_Create(0, 5, 5, 290, 390, 18)
PropertyGadget_AddItem(0, -1, "ID", "#Form_0", #PB_GadgetType_String)
PropertyGadget_AddItem(0, -1, "Title", "Window_0", #PB_GadgetType_String)
; PropertyGadget_AddComboItem(0, 2, "1")
; PropertyGadget_AddComboItem(0, 2, "2")
; PropertyGadget_AddComboItem(0, 2, "3")
PropertyGadget_AddItemSeparator(0, "Положение", 1)
PropertyGadget_AddItem(0, -1, "X", "12", #PB_GadgetType_Spin)
PropertyGadget_AddItem(0, -1, "Y", "15", #PB_GadgetType_Spin)
PropertyGadget_AddItem(0, -1, "Width", "732", #PB_GadgetType_Spin)
PropertyGadget_AddItem(0, -1, "Height", "300", #PB_GadgetType_Spin)
PropertyGadget_AddItemSeparator(0, "Seperator", 1)
PropertyGadget_AddItem(0, -1, "Enable", "#True", #PB_GadgetType_ComboBox)
PropertyGadget_AddItem(0, -1, "Disable", "Bitte Wдhlen", #PB_GadgetType_ComboBox)
Repeat
Ev = WaitWindowEvent(2)
PropertyGadget_Refresh(0, Ev)
Until Ev = #PB_Event_CloseWindow
EndIf
End
; IDE Options = PureBasic 5.31 (Linux - x86)
; CursorPosition = 473
; FirstLine = 450
; Folding = -------------
; EnableUnicode
; EnableXP