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-Ereignis-Warteschlange 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 Ereignis-Warteschlange 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

<- UnbindEvent() - Window Inhaltsverzeichnis - WindowBounds() ->