J'ai écrit un script, que j'utilise en include, dans lequel j'utilise une fonction enregistrée pour gérer le bouton "Annuler" de ma GUI :
GUIRegisterMsg(0x0111, "BarreAttente_WM_COMMAND")
Sans entrer dans le détail, je suis obligé d'en passer par là au lieu d'un simple GUIGetMsg() mais là n'est pas le souci.
Cette fonction fonctionne très bien et intercepte l'utilisation du bouton "Annuler" par son identifiant, son controlID.
Le code suivant l'utilisation de ce bouton affiche une table en utilisant _ArrayDisplay(). Cela fonctionnait aussi jusqu'au jour où la table ne s'est pas affichée . Après moult recherches et pistage de bug j'ai enfin trouvé :
Le controlID de mon bouton "Annuler" est récupéré par _ArrayDisplay() à son exécution via GUIGetMsg() dans sa boucle de gestion des événements "While 1 ... Wend" et correspond au controlID de son bouton "Exit" ! D'où l'absence d'affichage.
Je ne comprends pas bien pourquoi. Est-ce parce que je l'ai intercepté via une fonction enregistrée et non un GUIGetMsg() et qu'ainsi l'événement est resté actif ? Si quelqu'un a une idée, une piste, je suis preneur.
Toujours est-il que ce n'est pas un bug de ma part. C'est une situation certes pas fréquente mais possible, la preuve.
Pour éviter ce problème il faut tester l'handle de la fenêtre ayant émise l'événement dans _ArrayDisplay(). C'est si peu fréquent que les codeurs ont simplement utilisé, comme je le fais aussi systématiquement :
Code : Tout sélectionner
$iMsg = GUIGetMsg()
Code : Tout sélectionner
Local $aMsg = GUIGetMsg(1)
$iMsg = $aMsg[0]
If $iMsg > 0 And $aMsg[1] <> $hGUI Then $iMsg = 0
D'où ma 2ème question : Comment partager, faire étudier, peut-être valider et modifier le code de cet UDF ?