Tutorial utilisation des messages windows

Soyez le premier à donner votre avis sur cette source.

Vue 8 141 fois - Téléchargée 930 fois

Description

Ce projet démontre comment créer ses messages (au sens Windows du terme) et les utiliser au sein d'une application.
Il présente aussi la méthode pour "cracker" un message et effectuer différentes actions en fonction des paramètres reçus dans un message.
Une fois que vous avez compris celà, vous devriez être en mesure d'utiliser les messages envoyés à l'application par Windows et, éventuellement, de les détourner de leur usage originel (non recommandé) ou de leur faire faire davantage que ce qu'ils sont censés faire...
La compréhension des messages Windows est bien souvent une nécessité pour créer des composants.
C'est un plus pour écrire des programmes réagissant, de manière appropriée, aux signaux envoyés par l'environnement.

Conclusion :


Tout est dit plus haut.
Maintenant, pour ceux qui n'ont pas compris, téléchargez l'exemple (largement commenté dans le source) et mettez à profit cette technique dans vos futurs projets.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.