
Ich Versuche verzweifelt ein imagegadget in einem Fenster per linker Maustaste zu verschieben... In einem canvas geht es, leider nicht über das Gadget selbst, sondern nur über das canvas . Hoffe jemand kann mir helfen.
LG Jörn
Code: Alles auswählen
EnableExplicit
Global i, DragGadget, X, Y, StartX, StartY, GdtX, GdtY
Global NewList AllMovableGadget()
Procedure GetGadgetUnderMouseCursor(MX, MY)
ForEach AllMovableGadget()
If MX > GadgetX(AllMovableGadget()) And MX < GadgetX(AllMovableGadget())+GadgetWidth(AllMovableGadget())
If MY > GadgetY(AllMovableGadget()) And MY < GadgetY(AllMovableGadget())+GadgetHeight(AllMovableGadget())
ProcedureReturn AllMovableGadget()
EndIf
EndIf
Next
ProcedureReturn -1
EndProcedure
If OpenWindow(0,0,0,200,200,"Image Gadget Moving Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateImage(0, 32, 32, 24, #White)
If StartDrawing(ImageOutput(0))
Box(4,4,24,24, #Blue)
Box(8,8,16,16, #Green)
StopDrawing()
EndIf
EndIf
TextGadget(0, 8, 0, 184, 18, "Move Image with CONTROL")
ImageGadget(1, 8, 24, 80, 32, ImageID(0))
; For i = <FirstGadget> To <LastGadget>
For i = 0 To 1
AddElement(AllMovableGadget())
AllMovableGadget() = i
Next
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break ; done, leave the main loop
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Debug "Click Image "
EndSelect
Case #WM_MOUSEMOVE
If IsGadget(DragGadget) And (GetAsyncKeyState_(#VK_CONTROL) & $8000)
X = WindowMouseX(0) - StartX + GdtX
Y = WindowMouseY(0) - StartY + GdtY ;: Debug "Drag X,Y == " + X + ", " + Y
SetGadgetText(0, "Move Image to " + Str(X) + ", " + Str(Y))
If X >= 0 And Y >= 0
ResizeGadget(DragGadget, X, Y, #PB_Ignore, #PB_Ignore)
EndIf
EndIf
Case #WM_LBUTTONUP
If IsGadget(DragGadget) And (GetAsyncKeyState_(#VK_CONTROL) & $8000)
DragGadget = -1 ; release the DragGadget
SetGadgetText(0, "Move Image is done. ")
EndIf
Case #WM_LBUTTONDOWN
If (GetAsyncKeyState_(#VK_CONTROL) & $8000)
StartX = WindowMouseX(0)
StartY = WindowMouseY(0) : Debug "Start X,Y == " + StartX + ", " + StartY
DragGadget = GetGadgetUnderMouseCursor(StartX, StartY)
If IsGadget(DragGadget)
GdtX = GadgetX(DragGadget)
GdtY = GadgetY(DragGadget)
SetGadgetText(0, "Move Image to " + Str(GdtX) + ", " + Str(GdtY))
EndIf
EndIf
EndSelect
ForEver
EndIf