Seit der Einführung von BindEvent(), BindGadGetEvent() und BindMenuEvent() hatte ich angenommen, dass ein Ereignis nach dem Binden an eine Prozedur nicht mehr in der Ereignisschleife "erscheint", also dort nicht mehr abgefragt werden kann. Das war offenbar ein Irrtum. Leider ist das Ganze in der Hilfe nur sehr rudimentär dokumentiert.
Wie der folgende Code zeigt (getestet mit PB 5.70 unter Windows), kann anscheinend
- eine Prozedur mit mehreren Ereignissen verbunden sein,
- ein Ereignis an mehrere Proceduren gebunden sein,
- ein Ereignis, das an eine oder mehrere Prozeduren gebunden ist, außerdem auch in der Ereignisschleife abgefragt werden.
Code: Alles auswählen
EnableExplicit
Procedure ButtonHandlerA()
Debug "Click event on button #" + EventGadget()
Debug "Handled by ButtonHandler A"
EndProcedure
Procedure ButtonHandlerB()
Debug "Click event on button #" + EventGadget()
Debug "Handled by ButtonHandler B"
EndProcedure
Define Event.i
OpenWindow(0, 100, 100, 200, 90, "Click test", #PB_Window_SystemMenu)
ButtonGadget(0, 10, 10, 180, 30, "Button #0")
ButtonGadget(1, 10, 50, 180, 30, "Button #1")
BindGadgetEvent(0, @ButtonHandlerA())
BindGadgetEvent(0, @ButtonHandlerB())
BindGadgetEvent(1, @ButtonHandlerA())
BindGadgetEvent(1, @ButtonHandlerB())
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Debug "Click event on button #" + EventGadget()
Debug "Handled by the event loop"
Debug ""
EndSelect
Until Event = #PB_Event_CloseWindow