Le Builder a beau être fourni avec un bon nombre de composants, il arrive souvent que lon ait besoin den créer soi-même. Cest heureusement possible, et pas très difficile.
Un composant nétant quune classe C++ particulière, on a donc besoin de créer une classe, dérivant du composant existant le plus proche.
Tous les composants dérivent de TComponent. Si aucun composant existant ne peut être lancêtre du votre, il faut dériver votre classe de TComponent.
Pour cela, il faut, dans le Builder, faire Nouveau->composant.
Le Builder remplit automatiquement un certain nombre de lignes de code (à ne pas toucher ) en fonction des informations entrées, à savoir le composant ancêtre, et le nom du nouveau. Il est dusage de préfixer celui-ci par T.
TLabel est pratique, mais assez statique. Nous allons créer un nouveau composant, dérivé de TLabel, qui pourra clignoter.
Notre nouveau composant, TBlinkLabel, aura besoin des propriétés suivantes :
La fréquence de clignotement :
__property int Frequence={read=FFrequence,write=SetFrequence};
Le composant clignote ou non :
__property bool Clignote={read=FClignote,write=SetClignote};
ainsi que des champs privés suivants :
int FFrequence;
bool FClignote;
void __fastcall SetFrequence(int);
void __fastcall SetClignote(bool);
Pour contrôler le clignotement il faut un chronomètre (Timer), déclaré en champ privé, ainsi que sa fonction de gestion pour lévènement OnTimer :
TTimer *Timer1;
void __fastcall OnTimer(TObject*);
Dans le constructeur du TBlinkLabel on initialise le composant, ainsi que le Timer :
__fastcall TBlinkLabel::TBlinkLabel(TComponent* Owner)
: TLabel(Owner)
{
FFrequence=1000;
FClignote=false;
Timer=new TTimer(this);
Timer->Interval=FFrequence;
Timer->OnTimer=OnTimer;
}
Il nous faut encore écrire les fonctions SetFrequence et SetClignote :
void __fastcall TBlinkLabel::SetFrequence(int N)
{
FFrequence=N;
Timer->Interval=N;
}
void __fastcall TBlinkLabel::SetClignote(bool b)
{
FClignote=b;
Timer->Enabled=b;
Visible=true;
}
Ainsi que la gestion de lévènement OnTimer :
void __fastcall TBlinkLabel::OnTimer(TObject*)
{
Visible=!Visible;
}
Le tour est joué ! Reste à installer et tester le composant !