I. Gestion des événements OnMouseEnter et OnMouseExit▲
Pour l'exemple, nous allons poser un Label (Label1) sur une fiche (Form1). Nous passerons le texte du label en rouge quand le curseur viendra au-dessus puis en bleu quand il en sortira.
Unit1.h
Déclaration d'une variable TWndMethod pour mémoriser la procédure de fenêtre de Label1 et la méthode de la nouvelle procédure de fenêtre.
private: // Déclarations de l'utilisateur
Controls::TWndMethod OldLabelWP;
void __fastcall NewLabelWP(TMessage &Msg);Unit1.cpp
Événement OnCreate de Form1, sauvegarde de l'ancienne procédure de fenêtre de Label1 et affectation de la nouvelle.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OldLabelWP = Label1->WindowProc;
Label1->WindowProc = NewLabelWP;
}Nouvelle procédure de fenêtre de Label1 : traitement des commandes CM_MOUSELEAVE et CM_MOUSEENTER sinon appel de l'ancienne procédure de fenêtre si autre message.
void __fastcall TForm1::NewLabelWP(TMessage &Msg)
{
if (Msg.Msg == CM_MOUSELEAVE) //OnMouseExit
{
Label1->Font->Color = clBlue;
}
else if (Msg.Msg == CM_MOUSEENTER) //OnMouseEnter
{
Label1->Font->Color = clRed;
}
else OldLabelWP(Msg);
}Cette façon de faire est obsolète sur BCB6, on a accès à ces événements dans l'inspecteur d'objets (OnMouseEnter et OnMouseLeave).


