Recherche
1 connecté

  Actuellement : 0 commentaire Class Helpers

Delphi.NET : Les Assistances de classes (Class Helper)

dernière mise à jour le : vendredi 21 mai 2004

Retour au sommaire

Comment ajouter des méthodes ou des propriétés à une classe existante et à ses descendants lorsque l'on en possède pas les sources?

En d'autres termes comment, par exemple, ajouter une méthodes ShowClassName permettant d'afficher le nom de sa classe à tous les descendant des TControl ?

 

Dans l'exemple qui suit (application type VCL) , la déclaration TMyProjectHelper= class helper for TControl

indique que la Procedure ShowClassName s'applique à tous les TControl et à leurs descendants. En d'autres termes, on leur a ainsi ajouté une méthodes ShowClassName

 

TMyProjectHelper= class helper for TControl
public
   Procedure ShowClassName;
end;
implementation

{$R *.nfm}

procedure TMyProjectHelper.ShowClassName;
begin
 ShowMessage(self.ClassType.ClassName);
end;
  • Placez par exemple un TButton et un TBitBtn sur la Form1 et implémentez leur évènement OnClick de ces boutons et de la Form comme indiqué dans le code ci-dessous.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls, Borland.Vcl.Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    BitBtn1: TBitBtn;
    procedure Button1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

TMyProjectHelper= class helper for TControl
public
   Procedure ShowClassName;
end;

var
  Form1: TForm1;

implementation

{$R *.nfm}

procedure TMyProjectHelper.ShowClassName;
begin
 ShowMessage(self.ClassType.ClassName);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.ShowClassName;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   BitBtn1.ShowClassName;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  ShowClassName;
end;

end.
  • Testez : pas d'erreur à la compilation. Delphi a donc bien compris que les TControl possèdent maintenant une nouvelle méthode : ShowClassName (Les TBitBtn, TButton et TForm descendent de TControl).

  • A noter que :

    • Pour la beauté du code, on aurait pu remplacer les 3 événements OnClick par un seul :

    procedure TForm1.OnClic(Sender: TObject);
    begin
       (Sender as TControl).ShowClassName;
    end;
    
  • La déclaration de notre "helper" n'a pas besoin de se trouver dans la même Unit que notre code. Il suffit que l'unit où se trouve le helper soit dans les "Uses".

  • On ne peut, dans notre "helper" ajouter de déclaration de données (pas de déclaration du style FMonNom : String) ce qui limite l'ajout de propriétés puisqu'on ne peut y associer de donnée..

 

Retour au sommaire