Du hast zwar mein Beispiel vereinfacht, aber es leider damit auch seiner
wichtigsten Fähigkeit beraubt, nämlich einen Rechtsklick auf ein Fenster
von einem Rechtsklick auf ein Gadget zu unterscheiden, was Du in
Deinem Ursprungs-Posting übrigens ausdrücklich gefordert hattest:
Ich hatte deshalb lange an der Lösung Deines Problems herumprobiert.hilpert hat geschrieben:Wie kann nach einem WaitWindowEvent unter MacOs 4.11 erkannt werden,
ob eine MausTaste gedrückt wurde im Innern eines Fensters jedoch außerhalb von Gadgets ??
Ansonsten hatte ich im englischen Forum nämlich bereits eine "einfachere"
Lösung demonstriert gehabt, die zwar einen Klick auf die linke, mittlere
und rechte Maustaste in einem Fenster erkennt, aber nicht unterscheidet,
ob die Klicks auf eine freie Fensterfläche oder ein Gadget erfolgt sind:
http://www.purebasic.fr/english/viewtop ... 52&start=3
Aber keine Angst, ich habe mein "komplizierteres" Beispiel in diesem
Thread noch weiter ausgebaut, sodaß auch Klicks mit der linken Maustaste
erkannt werden:
Code: Alles auswählen
EnableExplicit
ImportC ""
GetEventClass(Event)
EndImport
#kEventClassControl = 'cntl'
#kEventClassWindow = 'wind'
#kEventControlContextualMenuClick = 12
#kEventWindowContextualMenuSelect = 78
#kEventWindowHandleContentClick = 85
Structure EventTypeSpec
EventClass.L
EventKind.L
EndStructure
Define EventHandlerUPP.L
Define WindowEvent.L
Procedure EventHandler(*NextEventHandler, Event.L, Ref.L)
Select GetEventClass(Event)
Case #kEventClassWindow
Select GetEventKind_(Event)
Case #kEventWindowContextualMenuSelect
If Ref = WindowID(0)
Debug "Right click in Window"
EndIf
Case #kEventWindowHandleContentClick
Debug "Left click in Window"
EndSelect
Case #kEventClassControl
If GetEventKind_(Event) = #kEventControlContextualMenuClick
Debug "Right click on Button"
EndIf
EndSelect
If *NextEventHandler
CallNextEventHandler_(*NextEventHandler, Event)
EndIf
EndProcedure
Dim EventTypes.EventTypeSpec(1)
OpenWindow(0, 200, 200, 300, 200, "MouseButtonClick-Example")
ButtonGadget(0, 100, 90, 100, 20, "Click me!")
; ----- Intercept right click into window
EventTypes(0)\EventClass = #kEventClassWindow
EventTypes(0)\EventKind = #kEventWindowContextualMenuSelect
; ----- Intercept left click into window
EventTypes(1)\EventClass = #kEventClassWindow
EventTypes(1)\EventKind = #kEventWindowHandleContentClick
; ----- Install EventHandler for Window
EventHandlerUPP = NewEventHandlerUPP_(@EventHandler())
InstallEventHandler_(GetWindowEventTarget_(WindowID(0)), EventHandlerUPP, 2, @EventTypes(), WindowID(0), 0)
; ----- Install EventHandler for each Gadget that has to detect right clicks
EventTypes(0)\EventClass = #kEventClassControl
EventTypes(0)\EventKind = #kEventControlContextualMenuClick
InstallEventHandler_(GetControlEventTarget_(GadgetID(0)), EventHandlerUPP, 1, @EventTypes(), GadgetID(0), 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 0
Select EventType()
Case #PB_EventType_LeftClick
Debug "Left click on Button"
EndSelect
EndIf
EndSelect
ForEver