|
|
|
|
- Présentation
- Ouverture d'une fenêtre depuis un thread secondaire via un dialogue par messages
- Principe
- Exemple
- La méthode décrite ci-dessus est utilisée dans l'exemple WD Messagerie instantanée.
Ouverture d'une fenêtre à partir d'un thread secondaire
Un thread secondaire ne peut pas ouvrir directement une fenêtre avec les fonctions classiques du WLangage telles que : Ouvre, Utilise, ... Or il peut être utile d'afficher une fenêtre à partir d'un thread secondaire. Par exemple, si un thread est utilisé pour gérer la réception des appels téléphonique, lorsqu'un appel entrant est détecté ce thread peut afficher une fenêtre avec les caractéristiques de l'appelant. La solution consiste à faire ouvrir la fenêtre à partir d'un code exécuté par le thread principal. Pour lancer depuis un thread secondaire l'exécution d'un code par le thread principal, les méthodes suivantes sont disponibles : - Exécuter une procédure globale du projet ou une procédure locale d'une fenêtre via la fonction ExécuteThreadPrincipal,
- Exécuter l'événement "Demande de mise à jour de l'affichage" d'une fenêtre via la fonction DemandeMiseAJourIHM,
- Instaurer un dialogue par messages entre les threads (fonctions PostMessage et Evénement).
Ouverture d'une fenêtre depuis un thread secondaire via un dialogue par messages Principe Pour ouvrir une fenêtre à partir d'un thread secondaire : - Lorsque le thread secondaire veut ouvrir une fenêtre, il envoie un message au thread principal grâce à la fonction PostMessage. Ce message indique au thread principal la fenêtre à ouvrir et les paramètres nécessaires à l'ouverture de la fenêtre.
- Le thread principal gère un événement spécifique, correspondant à la demande d'ouverture de fenêtre. Lorsque cet événement survient, la procédure WLangage lancée ouvre la fenêtre spécifiée (avec la fonction Ouvre par exemple) avec si nécessaire les paramètres indiqués.
La méthode décrite ci-dessus est utilisée dans l'exemple WD Messagerie instantanée. Le code d'ouverture de la fenêtre principale permet de : - mettre en place un événement pour gérer l'ouverture de la fenêtre dans le thread principal.
- déclencher les threads secondaires.
// Mise en place d'un événement // pour gérer l'ouverture de la fenêtre de "chat" gnIdEvenement = Evénement("OuvertureChat", "*.*", "DebutChat") SI gnIdEvenement = 0 ALORS // Erreur lors de la mise en place // de l'événement de gestion de la fenêtre de "chat" Erreur("Impossible de gérer la fenêtre d'ouverture de chat", ErreurInfo()) // L'application ne peut pas fonctionner sans cet événement FinProgramme() FIN // Ecoute des requêtes de connexion et de tests de présence ThreadExécute("ThreadPresence", threadNormal, "EcouteDemandePresence") ThreadExécute("ThreadRequete", threadNormal, "EcouteDemandeConnexion") L'ouverture de la fenêtre est réalisée par exemple dans le code de la procédure EcouteRequeteDebutMessage. Cette procédure est exécutée dans un thread. Le code utilisé pour ouvrir la fenêtre depuis le thread est le suivant : // Demande d'ouverture de la fenêtre de "chat" PostMessage(Handle(FEN_Principale),"DebutChat", FIC_CONTACT.IDCONTACT, FIC_CONTACT.IDCONTACT) Le message "DébutChat" est envoyé à la fenêtre principale (identifiée par son Handle). Ce message contient les différents paramètres à passer à la fenêtre. Le message est traité par l'événement défini dans le code d'ouverture de la fenêtre. Lorsque le message survient, la procédure "OuvertureChat" est automatiquement exécutée. C'est cette procédure qui ouvre la fenêtre. Le code de cette procédure est le suivant : PROCÉDURE OuvertureChat(nParam,nContact) OuvreSoeur(FEN_Message, nContact)
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|