TUTORIAL UTILISATION DES MESSAGES WINDOWS

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 12 nov. 2004 à 19:49
Printems Messages postés 2 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 23 mai 2009 - 23 mai 2009 à 23:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11969-tutorial-utilisation-des-messages-windows

Printems Messages postés 2 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 23 mai 2009
23 mai 2009 à 23:54
Effectivement, la fenêtre fille active est accessible par la propriété ActiveMDIChild.
Cependant MDIChildren[0] pointe également sur la fenêtre fille active.

Acceder à une fenêtre fille n'est pas trés simple.
Voila ce qui ressort de pas mal de temps passé faire des essais et des recherches dans l'aide :
L'index utilisé dans MDIChildren[ ] va de 0 à MDIChildCount-1. Si par exemple la fiche pointée par MDIChildren[3] est activée (en cliquant dessus), elle est alors pointée par MDIChildren[0]. En même temps, les 3 fiches qui avaient des index compris entre 0 et 2 ont leur index incrémenté de 1, et les index sont alors compris entre 1 et 3. L'index de MDIChildren[ ] permet de connaitre les fiches en fonction de leur ordre d'utilisation, de la plus récente(0) vers la plus ancienne (1,2,3...,MDIChildCount-1).

Un 'deuxieme' index correspond au numéro d'ordre de component dans la fenêtre mère. C'est le ComponentIndex de la fenetre fille (MDIChildren[ ].ComponentIndex). Il reste inchangé tant que aucun des components crés avant elle n'est détruit. Si un component créé avant elle est détruit, alors cet index est décrémenté de 1. Voir : ComponentCount, ComponentIndex, Components[].

Je crois que je m'écarte quelque peu du sujet de départ qui étatit les messages windows
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 mai 2009 à 12:04
Merci à printems d'avoir su aussi bien résumer l'essentiel ;)
J'ai néanmoins une question : la fenêtre enfant active, dans une application MDI, a-t-elle toujours l'index O dans le tableau MDIChildren ? La réponse est oui si on n'a qu'une seule fenêtre enfant et non dans les autres cas.
N'est-il pas préférable d'utiliser la propriété ActiveMDIChild de la classe TCustomForm ?
=> Application.MainForm.ActiveMDIChild.Handle;
Printems Messages postés 2 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 23 mai 2009
19 mai 2009 à 22:27
Important :
1) Déclaration dans UConst : " WM_MyMessage = WM_APP + 1; "
2) Dans Umain: Uconst dans les uses
3) dans Umain " procedure WMMyMessage(var Msg: TMessage); message WM_MyMessage; "
> WM_MyMessage étant défini dans le prototype de la procedure, ça marche.

Cela marche en SDI et aussi en MDI.

En MDI, le handle de la fenêtre enfant active est obtenu par Application.MainForm.MDIChildren[0].Handle
avec MainForm comme fenêtre principale

Un grand merci à Delphiprog
Rejoignez-nous