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).