WaitWindowEvent()

Syntaxe

Resultat = WaitWindowEvent([Minuteur])
Description
Attend qu'un nouvel évènement se produise.

Cette fonction est identique à WindowEvent(), mais en plus, elle bloque l'exécution du programme, ce qui est très important dans un environnement multi-tâches.

Arguments

Minuteur (optionnel) Permet de spécifier le temps maximal (en millisecondes) durant lequel la fonction sera bloquante si aucun évènement ne survient.

Si aucun délai n'est spécifié, il attend indéfiniment jusqu'à ce qu'un évènement se produise.

Valeur de retour

Renvoie l'évènement qui s'est produit.

Event() peut être utilisé pour récupérer cette valeur.

Comme avec la fonction WindowEvent(), les évènements possibles sont :
  #PB_Event_Menu            : Un menu a été sélectionné
  #PB_Event_Gadget          : Un gadget a été cliqué
  #PB_Event_SysTray         : Une icône dans la zone SysTray a été cliquée 
  #PB_Event_Timer           : Le temps d'un minuteur s'est écoulé
  #PB_Event_CloseWindow     : L'icône de fermeture de fenêtre a été cliquée
  #PB_Event_Repaint         : Tout ou partie du contenu de la fenêtre a été détruit et doit être reconstitué 
                              (Utile pour les applications graphiques 2D)
  #PB_Event_SizeWindow      : La fenêtre a été redimensionnée  
  #PB_Event_MoveWindow      : La fenêtre a été déplacée
  #PB_Event_MinimizeWindow  : La fenêtre a été minimisée
  #PB_Event_MaximizeWindow  : La fenêtre a été maximisée
  #PB_Event_RestoreWindow   : La fenêtre a été restaurée à sa taille normale
  #PB_Event_ActivateWindow  : La fenêtre a été activée (gain du focus)
  #PB_Event_DeactivateWindow: La fenêtre a été désactivée (perte du focus)
  #PB_Event_WindowDrop      : Une opération Glisser & Déposer s'est terminée sur une fenêtre
  #PB_Event_GadgetDrop      : Une opération Glisser & Déposer s'est terminée sur un gadget
  #PB_Event_RightClick      : Un clic droit de la souris s'est produit sur la fenêtre. Cela peut être utile pour afficher un menu contextuel
  #PB_Event_LeftClick       : Un clic gauche de la souris s'est produit sur la fenêtre
  #PB_Event_LeftDoubleClick : Un double clic gauche de la souris s'est produit sur la fenêtre

Remarques

Une application devrait, si possible, toujours utiliser cette fonction en préférence à WindowEvent() car elle ne prend pas de temps CPU en attente d'un évènement.

La boucle d'évènements de la fenêtre ne doit pas être traitée dans un thread, car il y a une limitation sur OS X et Linux. Une erreur du débogueur sera levée.

WaitWindowEvent() ne peut être appelé qu'une seule fois par boucle d'évènements, sinon les évènements seront "perdus" (chaque évènement ne peut être traité qu'une seule fois et n'est plus disponible pour un deuxième traitement).

Pour obtenir le numéro de la fenêtre où s'est produit l'évènement, utiliser la fonction EventWindow().

Exemple: Cas général

  If OpenWindow(0, 0, 0, 230, 90, "Exemple de gestion des évènements...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   ButtonGadget  (1, 10, 10, 200, 20, "Cliquez moi")
   CheckBoxGadget(2, 10, 40, 200, 20, "Cochez  moi")

   If CreateMenu(0, WindowID(0))
     MenuTitle("Menu")
     MenuItem(1, "Item 1")
     MenuItem(2, "Item 2")
     MenuItem(3, "Item 3")
   EndIf

   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 : Debug "Bouton cliqué !"
           Case 2 : Debug "Case à cocher cliquée !"
         EndSelect
       
       Case #PB_Event_Menu
         Select EventMenu()
           Case 1 : Debug "Menu item 1 cliqué !"
           Case 2 : Debug "Menu item 2 cliqué !"
           Case 3 : Debug "Menu item 3 cliqué !"
         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
  EndIf

Exemple: Avec minuteur dans WaitWindowEvent

  If OpenWindow(0, 0, 0, 300, 30, "Position de la souris sur le bureau", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(0, 10, 6, 200, 20, "")
    
    Repeat
      Event = WaitWindowEvent(20)
      
      If Event = 0 ; Il n'y a plus d'évènement dans la file d'attente, libère le processeur quelques millisecondes pour le multi-tâches
        SetGadgetText(0, "Coordonnées : " + Str(DesktopMouseX()) + "," + Str(DesktopMouseY()))  
      EndIf
       
    Until Event = #PB_Event_CloseWindow
  EndIf

Exemple: Avec une minuterie de fenêtre

  If OpenWindow(0, 0, 0, 300, 30, "Position de la souris sur le bureau", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(0, 10, 6, 200, 20, "")
    AddWindowTimer(0, 0, 10) ; Minuterie de 10 ms
    
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Timer ; Toutes les 10 ms => Affichage des coordonnées
        SetGadgetText(0, "Coordonnées : " + Str(DesktopMouseX()) + "," + Str(DesktopMouseY()))  
      EndIf
       
    Until Event = #PB_Event_CloseWindow
  EndIf

Voir aussi

WindowEvent(), EventWindow(), Event(), EventGadget(), EventMenu(), EventTimer(), EventData(), EventType(), PostEvent(), BindEvent(), UnbindEvent()

OS Supportés

Tous

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