Déclaration d'une nouvelle méthode de gestion d'un message

De RAD Studio
Aller à : navigation, rechercher

Remonter à Création de nouveaux gestionnaires de messages


Deux circonstances vous amènent à déclarer de nouvelles méthodes de gestion des messages :

  • Votre composant a besoin de gérer un message Windows qui n'est pas pris en compte par les composants standard.
  • Vous avez défini votre propre message et vous souhaitez l'utiliser avec vos composants.

Pour déclarer la méthode de gestion d'un message, suivez les étapes ci-après :

  1. Déclarez une méthode de procédure, de préférence dans la partie protected ou private de la déclaration de classe du composant.
  2. Nommez de préférence la méthode après le message qu'elle gère, sans caractères de soulignement.
  3. Passez un seul paramètre var appelé Message, de type TMessage.
  4. Ajoutez la directive message à la fin de la déclaration de votre procédure, en spécifiant le code du message que la méthode gèrera.
  1. Si vous utilisez C++, vous devez aussi créer un mappage de message immédiatement après la déclaration de votre méthode, en utilisant la syntaxe suivante :

    BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(msgCode, msgType, msgHandler)
    END_MESSAGE_MAP
    

    Le paramètre msgCode représente le code du message que la méthode gère. Le paramètre msgType représente le type du paramètre var de la méthode, qui est généralement TMessage, comme spécifié à l'étape 3. Enfin, le paramètre msgHandler spécifie le nom de la méthode gestionnaire, qui doit être le même que le nom de votre procédure.

  2. A l'intérieur de l'implémentation de la méthode message, écrivez le code de gestion spécifique au composant.

  3. Appelez le gestionnaire de message hérité si vous voulez que l'événement soit aussi géré par les méthodes ancêtres de gestion des messages.

    Remarque :  Afin de gérer plusieurs messages spécifiques, le type du paramètre var peut aussi être un des types suivants : TWMKey, TWMMouse, TWMPaint, TWMMenuChar, TWMNotify et TWMLButtonDown.

    Remarque :  Pour obtenir la liste complète des codes de tous les messages prédéfinis à utiliser avec la directive message, voir la liste des constantes de l'unité Messages. Vous pouvez aussi créer un nouveau type de message, qui est débattu sur la page Définition de vos propres messages.

    Pour de plus amples informations sur la déclaration d'une nouvelle méthode de gestion des messages, voir la section Méthodes de messages de la page Méthodes.

Exemple

Comme exemple, voici la déclaration d'un gestionnaire de message pour un message défini par l'utilisateur, appelé CM_CHANGECOLOR.

 #define CM_CHANGECOLOR (WM_APP + 400)
 
 class TMyControl : public TControl
 {
 .
 .
 .
 protected:
   void __fastcall CMChangeColor(TMessage &Message);
   BEGIN_MESSAGE_MAP
     MESSAGE_HANDLER(CM_CHANGECOLOR, TMessage, CMChangeColor)
   END_MESSAGE_MAP(TControl)
 };
 
 void __fastcall TMyControl::CMChangeColor(TMessage &Message)
 {
   // définir la couleur depuis le paramètre long
   Color = Message.LParam;
 
   // appeler le gestionnaire de message hérité
   TControl::CMChangeColor(Message);
 }
 #define CM_CHANGECOLOR (WM_APP + 400)
 
 class TMyControl : public TControl
 {
 .
 .
 .
 protected:
   void __fastcall CMChangeColor(TMessage &Message);
   BEGIN_MESSAGE_MAP
     MESSAGE_HANDLER(CM_CHANGECOLOR, TMessage, CMChangeColor)
   END_MESSAGE_MAP(TControl)
 };

 
 void __fastcall TMyControl::CMChangeColor(TMessage &Message)
 {
   // set color from long parameter
   Color = Message.LParam;
 
   // call the inherited message handler
   TControl::CMChangeColor(Message);
 }

Voir aussi