WindowEvent()
Syntaxe
Event = WindowEvent()Description
Teste si un évènement s'est produit sur chacune des fenêtres ouvertes. Cette fonction est à retour immédiat. Utilisez-la de préférence dans une boucle temposisée pour ne pas monopoliser les ressources de microprocesseur dans cette tâche.
Si vous souhaitez bloquer l'exécution du programme, utilisez la fonction WaitWindowEvent().
Pour obtenir le numéro de fenêtre où s'est produit l'évènement, utilisez la fonction EventWindow().
Cette commande doit être utilisée avec précaution, car comme elle n'est pas bloquante, elle peut consommer tout le temps processeur quand elle est dans une boucle d'attente. Dans de tels cas, utilisez la commande Delay() quelque part dans la boucle ou la commande WaitWindowEvent() avec un petit minuteur est conseillé.
Quand une fenêtre est ouverte dans un thread, le thread doit appeler WindowEvent() ou WaitWindowEvent() dans une boucle pour gérer les évènements pour cette fenêtre, car les évènements des fenêtres sont propres à chaque thread.
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_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 en graphique 2D) #PB_Event_MoveWindow : La fenêtre a été déplacée #PB_Event_SizeWindow : La fenêtre a été redimensionnée #PB_Event_ActivateWindow : La fenêtre a été activée (gain 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
Vous trouverez un exemple dans la description de WaitWindowEvent().
Après un évènement #PB_Event_WindowDrop ou #PB_Event_GadgetDrop , les fonctions de la bibliothèque Drag & Drop peuvent être utilisées pour examiner et lire les données déposées.
Pour une utilisation efficace de la boucle WindowEvent() il convient de respecter cette structure:Repeat Event = WindowEvent() If Event ; Un evenement est dans la file d'attente, il faut le gerer. .... Else Delay(1) ; Plus d'evenements dans la file d'attente, laissons du temps processeur aux autres applications ! EndIf Until Event = #PB_Event_CloseWindowNote: Le délai ne doit pas être spécifié après chaque évènement, car quand il y a de nombreux évènements dans la file d'attente (lors d'un rafraîchissement de fenêtre, de gadgets etc..) l'application attendra 1 ms entre chaque évènement ce qui rendra l'affichage très lent. Le délai est utile uniquement quand il n'y a plus d'évènement dans la file d'attente (donc quand WindowEvent() renvoie 0). Une autre façon de procéder est d'utiliser les 'timers' de l'API avec WaitWindowEvent().
OS Supportés
Tous