WaitWindowEvent()
Syntax
Ereignis = WaitWindowEvent([Timeout])Beschreibung
Wartet bis ein Ereignis auftritt. Es ist die selbe Funktion wie WindowEvent(), hält aber die Programmausführung an, was sehr wichtig in einer Multitasking Umgebung ist.
Parameter
Timeout (optional) Der Timeout (auch "Zeitlimit", in Millisekunden), welcher die Funktion nach einer bestimmten Zeit zur Rückkehr (aus der Wartestellung) veranlasst, wenn keine Ereignisse aufgetreten sind. Wenn kein Timeout angegeben wird, dann wartet sie unbegrenzt bis ein Ereignis auftritt.
Rückgabewert
Gibt das aufgetretene Ereignis zurück, siehe WindowEvent() für weitere Informationen. Event() kann verwendet werden, um diesen Wert "wiederherzustellen".
Anmerkungen
Eine Applikation sollte möglichst immer diese Funktion anstelle von WindowEvent() verwenden, da sie beim Warten auf ein Ereignis keine Rechenzeit beansprucht.
Eine Fenster-Ereignisschleife sollte nicht in einem Thread verarbeitet werden, da es auf OS X und Linux einige Einschränkungen gibt. Ein Debugger-Fehler wird ausgelöst.
Pro Ereignisschleife darf nur einmal WaitWindowEvent() aufgerufen werden, da andernfalls Ereignisse "verloren" gehen (jedes Ereignis kann nur einmal ausgewertet werden und steht damit nach der ersten Verarbeitung nicht noch ein zweites Mal zur Verfügung).
Beispiel: Allgemeiner Fall
If OpenWindow(0, 0, 0, 230, 90, "Event-Handling Beispiel...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ButtonGadget (1, 10, 10, 200, 20, "Klick mich") CheckBoxGadget(2, 10, 40, 200, 20, "Markiere mich") If CreateMenu(0, WindowID(0)) MenuTitle("Menu") MenuItem(1, "Eintrag 1") MenuItem(2, "Eintrag 2") MenuItem(3, "Eintrag 3") EndIf Repeat Event = WaitWindowEvent() Select Event Case #PB_Event_Gadget Select EventGadget() Case 1 : Debug "Schalter 1 angeklickt!" Case 2 : Debug "Schalter 2 angeklickt!" EndSelect Case #PB_Event_Menu Select EventMenu() Case 1 : Debug "Menü-Eintrag 1 angeklickt!" Case 2 : Debug "Menü-Eintrag 2 angeklickt!" Case 3 : Debug "Menü-Eintrag 3 angeklickt!" EndSelect EndSelect Until Event = #PB_Event_CloseWindow EndIf
Beispiel: Mit einem Timeout
If OpenWindow(0, 0, 0, 300, 30, "Position of the mouse on the desktop", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) TextGadget(0, 10, 6, 200, 20, "") Repeat Event = WaitWindowEvent(20) If Event = 0 ; Keine Ereignisse in der Warteschlange mehr, also können wir die Mauskoordinaten anzeigen SetGadgetText(0, "Coordinates: " + Str(DesktopMouseX()) + "," + Str(DesktopMouseY())) EndIf Until Event = #PB_Event_CloseWindow EndIf
Beispiel: Mit einem Timer
If OpenWindow(0, 0, 0, 300, 30, "Position of the mouse on the desktop", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) TextGadget(0, 10, 6, 200, 20, "") AddWindowTimer(0, 0, 10) ; Timeout = 10 ms Repeat Event = WaitWindowEvent() If Event = #PB_Event_Timer ; Jede 10 ms => Lasst uns die Koordinaten anzeigen SetGadgetText(0, "Coordinates: " + Str(DesktopMouseX()) + "," + Str(DesktopMouseY())) EndIf Until Event = #PB_Event_CloseWindow EndIf
Siehe auch
WindowEvent(), Event(), EventWindow(), EventGadget(), EventMenu(), EventTimer(), EventData(), EventType(), PostEvent(), BindEvent(), UnbindEvent()
Unterstützte OS
Alle