TUTORIAL UTILISATION DES MESSAGES WINDOWS

Messages postés
1237
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
- - Dernière réponse : 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
-
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
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24 -
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
-
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