cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 2006
-
12 nov. 2004 à 19:49
Printems
Messages postés2Date d'inscriptionmardi 5 mai 2009StatutMembreDernière intervention23 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.
Printems
Messages postés2Date d'inscriptionmardi 5 mai 2009StatutMembreDernière intervention23 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és2Date d'inscriptionmardi 5 mai 2009StatutMembreDernière intervention23 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
23 mai 2009 à 23:54
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
20 mai 2009 à 12:04
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;
19 mai 2009 à 22:27
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