GadgetMouseX() und GadgetMouseY()
Verfasst: 14.08.2012 04:45
Ich fragte mich, wieso nur das CanvasGadget eine Mauspositionabfrage hat...
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.
Edit : Crossplatform und "Abtastbereich" um 1 verringert.
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