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