Dans beaucoup de fonctions, on trouve comme argument
TObject *Sender
. Cet argument est utilisé par les événements pour savoir quel est l'objet qui a appellé la fonction. Voici un exemple simple pour clarifier : dans un nouveau projet, placez sur votre fiche deux boutons. Double-cliquez sur le premier (Button1). Vous obtenez alors le code suivant :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
}
Dans ce cas, vous imaginez bien que le Sender ne peut être que Button1. Donc Sender n'est pas très utile. Sélectionnez maintenant votre deuxième bouton sur la fiche (Button2). Dans l'inspecteur d'objets, dans l'onglet événements, pour l'événement OnClick, sélectionnez la fonction Button1Click. Maintenant, la fonction Button1Click est appelée lorsque vous cliquez sur Button1 ou lorsque vous cliquez sur Button2. Sender permet alors de savoir quelle objet a appelé la fonction Button1Click. Voici donc la fonction Button1Click d'au-dessus réécrite :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (dynamic_castTButton *(Sender) == Button1)
ShowMessage("Button1");
else
ShowMessage("Button2");
}
Sender étant un pointeur de type TObject*, il faut le convertir en un pointeur de type TButton* pour pouvoir vérifier quel est le bouton qui a envoyé. Pour cela, on utilise
dynamic_cast
. Voici une version plus perfectionnée ci-dessous qui permet de récupérer le pointeur sur le bouton :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton *Button;
Button = dynamic_castTButton *(Sender);
if (Button == Button1)
ShowMessage("Button1");
else
if (Button == Button2)
ShowMessage("Button2");
else
ShowMessage("C'est louche");
Button->Caption = "Appuyé";
}
On voit ainsi que l'on peut accéder à toutes les propriétés du bouton. Dans ce cas, nous modifions son texte et y plaçons "Appuyé".