Essayes ça.
Ca te fais apparaître un curseur de resize quand tu cliques sur le splitter, ce qui te permet de voir où tu vas avec le curseur. Cela t'aidera peut-être. Le bean's c'est que les gadgets ne sont redimmensionnés qu'au relâchement de la souris et je n'ai pas cherché pour modifier.
Code : Tout sélectionner
Global MySplitter_ArrowCursorH, cur1
Global Splitter_Activate
Global SkinButton.l
Procedure MySplitterGadget(Gadget, X, Y, Width, Height)
ButtonGadget(Gadget, X, Y, Width, Height,"", #BS_OWNERDRAW)
MySplitter_ArrowCursorH = LoadCursorFromFile_(@"SPLITH.CUR")
CreateImage(0,Width,Height)
StartDrawing(ImageOutput(0))
Box(0,0,Width ,Height , GetSysColor_(#COLOR_3DSHADOW))
Box(0,0,Width-2,Height-2, GetSysColor_(#COLOR_3DHILIGHT))
Box(2,2,Width-4,Height-4, GetSysColor_(#COLOR_3DFACE))
StopDrawing()
SkinButton = CreatePatternBrush_(ImageID(0))
ProcedureReturn
EndProcedure
Procedure IsMouseOver(wnd)
GetWindowRect_ (wnd,re.RECT)
re\left = re\left
re\top = re\top
re\right = re\right
re\bottom = re\bottom
GetCursorPos_ (pt.POINT)
ProcedureReturn PtInRect_ (re,pt\x,pt\y)
EndProcedure
Procedure ResizeInterface(Window.l, Splitter.l, Gadget1.l, Gadget2.l)
Protected Delta.l
If WindowMouseX(Window) = -1
; hors de la fenetre
If DesktopMouseX() > WindowX(Window) + WindowWidth(Window)
; à droite de la fenetre
Delta = WindowWidth(Window)
ElseIf DesktopMouseX() < WindowX(Window)
; à gauche de la fenetre
Delta = - GadgetX(Splitter)
EndIf
Else
Delta = WindowMouseX(Window) - GadgetX(Splitter)
EndIf
If GadgetWidth(Gadget1) + Delta < 0
Delta = 0 - GadgetWidth(Gadget1)
EndIf
If GadgetWidth(Gadget2) - Delta < 0
Delta = GadgetWidth(Gadget2)
EndIf
ResizeGadget(Gadget1, #PB_Ignore, #PB_Ignore, GadgetWidth(Gadget1) + Delta, #PB_Ignore)
ResizeGadget(Splitter, GadgetX(Splitter) + Delta, #PB_Ignore, #PB_Ignore, #PB_Ignore)
ResizeGadget(Gadget2, GadgetX(Gadget2) + Delta, #PB_Ignore, GadgetWidth(Gadget2) - Delta, #PB_Ignore)
ProcedureReturn
EndProcedure
Procedure WindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If Splitter_Activate = #True
;SetCursor_(MySplitter_ArrowCursorH)
SetCursor_(cur1)
EndIf
Select Message
Case #WM_MOUSEMOVE
If IsMouseOver(GadgetID(3))
;SetCursor_(MySplitter_ArrowCursorH)
SetCursor_(cur1)
EndIf
Case #WM_PARENTNOTIFY
Select wParam
Case #WM_LBUTTONDOWN
If IsMouseOver(GadgetID(3))
Splitter_Activate = #True
EndIf
EndSelect
Case #WM_DRAWITEM
*dis.DRAWITEMSTRUCT
*dis = lParam
If *dis\itemState & #ODS_CHECKED
FillRect_(*dis\hdc, *dis\rcItem, SkinButton)
ElseIf *dis\itemState & #ODS_SELECTED
FillRect_(*dis\hdc, *dis\rcItem, SkinButton)
Else
FillRect_(*dis\hdc, *dis\rcItem, SkinButton)
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
hWnd=OpenWindow(0,200,200,240,190,"SplitterGadget Example",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ListViewGadget(0, 005, 005, 110, 180)
ListViewGadget(1, 125, 005, 110, 180)
Splitt=MySplitterGadget(3, 116, 010, 008, 170)
SetClassLong_(Splitt,#GCL_HCURSOR,0)
cur1 = LoadCursor_(0, #IDC_SIZEWE); curseur d'élargissement
MySplitter_ArrowCursorH = cur1
For k=0 To 10
AddGadgetItem(0, -1, "0 - " + Str(k))
AddGadgetItem(1, -1, "1 - " + Str(k))
Next
SetWindowCallback(@WindowCallback())
Repeat
Event = WaitWindowEvent()
Select Event
Case #WM_LBUTTONUP
If Splitter_Activate = #True
Splitter_Activate = #False
ResizeInterface(0, 3, 0, 1)
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
DestroyCursor_(cur1)
End