Dans le code ci-dessous, on suppose que tous les gadgets sont déjà sélectionnés. Je clique sur n'importe quel gadget et je le déplace (cliquer-glisser) n'importe où sur la fenêtre. J'aimerais que les deux autres gadgets suivent le mouvement. Si je déplace l'un des gadgets de 10 pixels à droite et de 5 pixels en bas, j'aimerais que les deux autres se déplacent en même temps de 10 pixels à droite et de 5 pixels en bas.
Une idée ?
Code : Tout sélectionner
Structure Selected
id.l
hwd.l
x.l
y.l
w.l
h.l
selected.b
EndStructure
Global NewList gadgetsSelected.Selected()
Procedure addgadget(id)
AddElement(gadgetsSelected())
gadgetsSelected()\hwd=GadgetID(id)
gadgetsSelected()\id=id
gadgetsSelected()\x=GadgetX(id)
gadgetsSelected()\y=GadgetY(id)
gadgetsSelected()\w=GadgetWidth(id)
gadgetsSelected()\h=GadgetHeight(id)
gadgetsSelected()\selected=#True
EndProcedure
OpenWindow(0, 0, 0, 600, 600, "Déplacer tous les boutons en même temps", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Gadg1 =ButtonGadget(1, 0, 0, 200, 40,"B1")
Gadg2 =ButtonGadget(2, 0, 50, 200, 40,"B2")
Gadg3 =ButtonGadget(3, 0, 100, 200, 40,"B3")
addgadget(1)
addgadget(2)
addgadget(3)
ForEach gadgetsSelected()
Debug "-------------------------"
Debug gadgetsSelected()\hwd
Debug gadgetsSelected()\id
Debug gadgetsSelected()\x
Debug gadgetsSelected()\y
Debug gadgetsSelected()\w
Debug gadgetsSelected()\h
Debug gadgetsSelected()\selected
Next
Repeat
eventID = WaitWindowEvent()
Select eventID
Case #WM_LBUTTONDOWN
;wParam:Indicates whether various virtual keys are down. ctrl, shift rbutton, mbutton
;lParam:coordonnate x,y
;lParam:The low-order word specifies the x-coordinate of the cursor.
; The high-order word specifies the y-coordinate of the cursor.
; The coordinates are relative to the upper-left corner of the client area.
If EventwParam() & #MK_LBUTTON
Debug "----------"
; Affiche le wParam : 1=#MK_LBUTTON=bouton gauche souris enfoncé
Debug EventwParam()
;Distance en x à l'intérieur du gadget
Debug EventlParam() & $FFFF ;x
;Distance en y à l'intérieur du gadget
Debug (EventlParam()>>16) & $FFFF
EndIf
;hwd=WindowFromPoint_(DesktopMouseX() + DesktopMouseY() <<32)
hwd=ChildWindowFromPoint_(WindowID(0),WindowMouseX(0) + WindowMouseY(0) <<32)
Select hwd
Case GadgetID(1)
ReleaseCapture_()
SendMessage_(GadgetID(1), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
Case GadgetID(2)
ReleaseCapture_()
SendMessage_(GadgetID(2), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
Case GadgetID(3)
ReleaseCapture_()
SendMessage_(GadgetID(3), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
EndSelect
EndSelect
Until eventID = #PB_Event_CloseWindow