VI : Conception de composants

Le Builder a beau être fourni avec un bon nombre de composants, il arrive souvent que l’on ait besoin d’en créer soi-même. C’est heureusement possible, et pas très difficile.

Un composant n’étant qu’une 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 l’ancêtre du votre, il faut dériver votre classe de TComponent.

 

  • VI-1 : Créer un nouveau composant
  • 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 d’usage de préfixer celui-ci par T.

     

  • VI-2 : Exemple : composant Label clignotant
  • 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 !