Ich überlege, wie ich den verschiebaren Balken des SplitterGadgets() besser sichtbar machen kann.
Das es sich wohl um ein PureBasic eigenes Control handelt, wird das nicht per API gehen.
Daher meine Überlegung, so etwas wie einen Griff über dem Balken anzuzeigen.
Meine Lösung ist aber nicht optimal. Kann man das besser machen?
Code: Alles auswählen
Enumeration
#Button1
#Button2
#Splitter
#Knob
EndEnumeration
Procedure IsMouseOver(hwnd)
GetWindowRect_(hwnd,r.RECT)
GetCursorPos_(P.POINT)
Result = PtInRect_(r,P\y << 32 + P\x)
ProcedureReturn Result
EndProcedure
Procedure MoveSplitter()
While GetAsyncKeyState_( #VK_LBUTTON ) & $8000
GetCursorPos_ (@P.POINT)
ScreenToClient_ (WindowID(0), @P)
hwnd = ChildWindowFromPoint_ (GadgetID(#Splitter), P\y<< 32+P\x)
SetGadgetState(#Splitter, P\y)
ResizeGadget(#Knob, #PB_Ignore, P\y, #PB_Ignore, #PB_Ignore)
UpdateWindow_(GadgetID(#Knob))
Wend
EndProcedure
Procedure MoveKnob()
ResizeGadget(#Knob, #PB_Ignore, GetGadgetState(#Splitter), #PB_Ignore, #PB_Ignore)
UpdateWindow_(GadgetID(#Knob))
EndProcedure
If OpenWindow(0, 0, 0, 230, 195, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ContainerGadget(#Button1, 0, 0, 220, 100, #PB_Container_Single)
CloseGadgetList()
ContainerGadget(#Button2, 0, 100, 230, 100, #PB_Container_Double)
CloseGadgetList()
SplitterGadget(#Splitter, 0, 0, WindowWidth(0), WindowHeight(0), #Button1, #Button2, #PB_Splitter_Separator)
ButtonGadget(3, WindowWidth(0)/2 - 20, WindowHeight(0)/2 - 5, 40, 15, "===" )
SetParent_( GadgetID(#Knob), GadgetID(#Splitter))
BindGadgetEvent(#Splitter, @MoveKnob(), #PB_EventType_LeftClick)
Repeat
Event = WaitWindowEvent()
If GetAsyncKeyState_( #VK_LBUTTON ) & $8000
If IsMouseOver(GadgetID(#Knob))
MoveSplitter()
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf