Bonjour,

J'ai une déception sur la fonctionnalité d'interception d'événement Windows de WinDev.

En fait, comme «On ne nous dit pas tout» , j'ai eu l'occasion de clarifier le comportement de l'interception d'événements Windows.
Et donc, je vous rapporte le bilan de mes constatations.
Si vous aussi, vous pensez avoir des informations utiles à une meilleure compréhension, je vous encourage à compléter mon message.

Voilà mon contexte... c'est en WD12:

Le souhait est de "diffuser" un message applicatif vers de multiples fenêtres destinataires en se basant sur le mécanisme des messages Windows.
_ cf. les fonctions SendMessage() et PostMessage()

Concrêtement, dans une application MDI, le mécanisme des messages Windows est utilisé pour envoyer un message applicatif spécifique vers la fenêtre mère MDI.
Ce message applicatif est "MonMessage".

Les fenêtres filles MDI interceptent toutes le message applicatif "MonMessage" envoyé vers la fenêtre mère MDI.

Traitement Déclarations globales FenêtreFilleMDI:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
nEvt est un entier = Evénement(MaProcédureEvénementielleLocale,"FenMèreMDI","MonMessage")
//
Traitement Fermeture FenêtreFilleMDI:
Que croyez-vous qu'il se passe quand le message applicatif "MonMessage" est envoyé à la fenêtre mère MDI ???

Moi je pensais que les procédures événementielles locales de toutes les fenêtres filles ouvertes seraient exécutées successivement...
Eh bien non !

En fait j'ai constaté que:
_ (1) il y a "empilage/dépilage" des commandes d'interception;
_ (2) seule la commande d'interception la plus récemment empilée est "active" (prise en compte).

Supposons 3 fenêtres filles A, B et C, ouvertes dans cet ordre, qui toutes interceptent le même message sur la même fenêtre Mère.
Quand le message applicatif est envoyé à la fenêtre Mère, seule la fenêtre C intercepte l'événement.
Mais si la fenêtre C est refermée, alors c'est la fenêtre B qui peut "à nouveau" récupérer l'événement.

Aviez-vous compris que ça fonctionne ainsi ???

Et voilà une autre information à propos de la fonction FinEvénement().
Dans la doc, il est dit:
Citation Envoyé par Aide en ligne

Remarque : L'interception des événements est automatiquement arrêtée lorsque la fenêtre associée est fermée.
En fait, dans un tel contexte d'empilage des commandes d'interception, il n'y a rien d'automatique.
Si on omet d'exécuter FinEvénement() à la fermeture d'une fenêtre, alors l'application plante au prochain message applicatif envoyé à la fenêtre cible.
A bon entendeur, salut !

En espérant que ces éclaircissements seront utiles à d'autres, pour préciser les fonctionnalités, et pour éviter de perdre du temps dans une impasse (comme ce fut mon cas ).
_