Hier eine Koordinatenabfrage, einfach gestrickt aber effektiv auch für andere Gadgets.
GadgetMouseX(Gadget) und GadgetMouseY(Gadget) verhält sich wie WindowMouseX() und WindowMouseY(),
gibt also eine -1 zurück, wenn die Maus NICHT im Gadget ist.
Code: Alles auswählen
; »»»
; »»» GadgetMouseX(), GadgetMouseY()
; »»» Einfache Abfrage der MausPosition innerhalb eines Gadgets
; »»» Was das CanvasGadget kann, können andere auch ;)
; »»»
Procedure GadgetMouseX(Gadget, Window)
Protected gx, gy, gw, gh
Protected mx, my, Result = -1
If IsWindow(Window) And IsGadget(Gadget)
gx = GadgetX(Gadget) : gy = GadgetY(Gadget)
gw = GadgetWidth(Gadget) : gh = GadgetHeight(Gadget)
mx = WindowMouseX(Window) : my = WindowMouseY(Window)
If mx >= gx And mx < gx + gw And my >= gy And my < gy + gh
Result = mx - gx
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure GadgetMouseY(Gadget, Window)
Protected gx, gy, gw, gh
Protected mx, my, Result = -1
If IsWindow(Window) And IsGadget(Gadget)
gx = GadgetX(Gadget) : gy = GadgetY(Gadget)
gw = GadgetWidth(Gadget) : gh = GadgetHeight(Gadget)
mx = WindowMouseX(Window) : my = WindowMouseY(Window)
If mx >= gx And mx < gx + gw And my >= gy And my < gy + gh
Result = my - gy
EndIf
EndIf
ProcedureReturn Result
EndProcedure
; »»» Demo
OpenWindow(0,0,0,300,300,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CanvasGadget(1, 50, 50, 200, 200)
Repeat
Event = WaitWindowEvent(25)
Select Event
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
MX = GadgetMouseX(1,0)
MY = GadgetMouseY(1,0)
If OMX <> MX Or OMY <> MY
OMX = MX : OMY = MY
SetWindowTitle(0,Str(mx)+" : "+Str(my))
EndIf
Until Quit > 0