ich frage mich als Anfänger, welche Methode für die Ereignisabfrage die geeigente ist.
Dazu mal zwei einfache Beispiele. Listing 1 mit der "klassischen" Eventschleife und Listing 2 mit BindEvent und Callbacks.
Code: Alles auswählen
; Listing 1
; Ereignisabfrage in Schleife mit Select und ggf. IF
EnableExplicit
Declare OpenMyWindow()
Declare ProgramEnd()
Declare ButtonAction()
Enumeration
#Window_0
#Button_0
EndEnumeration
Define Event.i
Procedure OpenMyWindow()
OpenWindow(#Window_0, #PB_Ignore, #PB_Ignore, 350, 140, "My Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Button_0, 110, 90, 110, 30, "Dürck mich!")
EndProcedure
Procedure ProgramEnd()
End
EndProcedure
Procedure ButtonAction()
MessageRequester("Info", "Du hast mich gedrückt!", #PB_MessageRequester_Info)
EndProcedure
OpenMyWindow()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
If EventWindow() = #Window_0 ; falls mehrere Fenster möglich sind
ProgramEnd()
EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
ButtonAction()
EndSelect
EndSelect
ForEver
Code: Alles auswählen
; Listing 2
; Ereignis mit Callback
EnableExplicit
Declare OpenMyWindow()
Declare ProgramEnd()
Declare ButtonAction()
Enumeration
#Window_0
#Button_0
EndEnumeration
Define Event.i
Procedure OpenMyWindow()
OpenWindow(#Window_0, #PB_Ignore, #PB_Ignore, 350, 140, "My Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Button_0, 110, 90, 110, 30, "Dürck mich!")
BindEvent(#PB_Event_CloseWindow, @ProgramEnd(), #Window_0)
;BindGadgetEvent(#Button_0, @ButtonAction(), #PB_EventType_LeftClick)
BindEvent(#PB_Event_Gadget, @ButtonAction(), #Window_0, #Button_0, #PB_EventType_LeftClick)
EndProcedure
Procedure ProgramEnd()
End
EndProcedure
Procedure ButtonAction()
MessageRequester("Info", "Du hast mich gedrückt!", #PB_MessageRequester_Info)
EndProcedure
OpenMyWindow()
Repeat
WaitWindowEvent()
ForEver
Mir persönlich gefällt die Methode aus Listing 2 wesentlich besser, da auch bei vielen komplexen Fenstern, keine Monster-Eventschleife entsteht (ggf. noch mit einem Mix aus Select/if-Anweisungen). Ich bin mir aber nicht sicher, ob die Methode in Listing 2 nicht auch Nachteile mit sich bringt. Bei Echtzeitereignissen soll man wohl grundsätzlich BindEvent verwenden.
Konkret geht es mir aber nicht darum, wem welche Methode besser gefällt, sondern einfach darum, ob ich BindEvent "bedenkenlos" einsetzen kann oder ich mir damit später einen Haufen Ärger einhandel.
Ich wollte nicht noch einmal eine bereits geführte Diskussion auslösen (siehe viewtopic.php?f=16&t=30130&hilit=bindevent)
Gruß
Istvan42