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