Modifier

WinDev - Partager des événements entre applications

Suite à une question sur le forum, voici une méthode vous permettant de partager des événements entre deux ou plusieurs applications WinDev®.

Explication

Le principe est d'utiliser la méthode PostMessage (ou SendMessage). Ces procédures permettent d'envoyer un message windows.

On réceptionne ensuite ces messages via la procédure Evénement.

Avant, on était obligé de définir des n° de messages (toujours expliqué dans l'aide), mais il est possible de simplifier le processus en utilisant des chaînes de caractères personnalisées pour chaque message que l'on souhaite créer. C'est ensuite WinDev qui se charge d'associer cette chaîne de caractère à un n° de message Windows.

Enfin, pour envoyer le message à toutes les applications, il suffit d'indiquer -1 dans le hwnd de la fonction PostMessage. Sinon, il faut aller rechercher le handle de la fenêtre en question, et c'est un peu de travail en plus, alors que nous, nous voulons des choses simples.

Un exemple valant plus que 10000 mots, je vous propose de tester cette méthode ensemble :

Vous devez créer un ou plusieurs projets.

Pour chaque projet qui doit réceptionner le message ou les messages, vous devez créer une fenêtre. Dans le code d'initialisation de la fenêtre, vous indiquez :

CONSTANTE
    _MESSAGE_ = "MESSAGE_TEST"
    _MESSAGE_2_ = "MESSAGE_TEST 2"
FIN

Evénement(_tester_01, "*.*", _MESSAGE_)
PROCEDURE INTERNE _tester_01(_message)
    Trace(ChaîneConstruit("Evenement '%1' reçu", _message))
FIN

Evénement(_tester_02, "*.*", _MESSAGE_2_)
PROCEDURE INTERNE _tester_02(_message)
    Trace(ChaîneConstruit("Evenement '%1' reçu", _message))
FIN

Et voilà, cette fenêtre affichera une trace au moment de la réception du message.

Pour envoyer le message "MESSAGE_TEST"

PostMessage(-1, _MESSAGE_, 0, 0) // Non bloquant
// ou SendMessage(-1, _MESSAGE_, 0, 0) // Bloquant

Pour envoyer le message "MESSAGE_TEST 2"

PostMessage(-1, _MESSAGE_2_, 0, 0) // Non bloquant
// ou SendMessage(-1, _MESSAGE_2_, 0, 0) // Bloquant

Conclusion

Voilà, avec cette méthode vous pouvez déclencher des événements dans une application à la demande d'une autre application. Bien entendu, cette méthode est à utiliser avec précaution car elle n'est pas facile à debugger et peut vous apporter plus de problèmes que de solutions.

Pour bien intégrer cet exemple, prenez 10 minutes et testez le code que je vous ai donné. N'hésitez pas ensuite à me donner votre avis (que ça fonctionne ou pas).

Merci pour votre lecture !