IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

La création dynamique de composants


précédentsommairesuivant

I. Créer un composant dynamiquement

On a parfois besoin d'ajouter des composants au cours d'un programme. Bien sûr, on peut parfois les cacher pour les afficher quand on en a besoin ; mais, dans certains cas, on ne sait pas à l'avance combien de composants on aura besoin. C'est pourquoi on crée les composants dynamiquement.

On va prendre l'exemple de la création d'un bouton (TButton). Assuez-vous d'abord que StdCtrls est bien dans la liste des uses, car c'est dans cette unité que les TButton sont déclarés. Ensuite, on va déclarer une variable : on l'appelle Btn (contraction de Button) et c'est un TButton. Maitenant qu'il est déclaré, il faut le créer en utilisant la propriété Create du TButton :

 
Sélectionnez
constructor TButton.Create(AOwner: TComponent);

La propriété Owner permet de connaître le propriétaire d'un composant. Lorsqu'un composant en possède un autre, la mémoire du composant possédé est libérée quand la mémoire du propriétaire est libérée. Ainsi, cela signifie que lorsqu'une fiche est détruite, tous les composants de la fiche le sont également. Lors de sa destruction, le propriétaire libère le composant. Dans pratiquement tous les cas, le propriétaire est la fiche (Form1, par défaut). Au lieu de spécifier Form1, on peut utiliser simplement self.

 
Sélectionnez
var
 Btn: TButton;
begin
 Btn := TButton.Create(Self);
end;

Une erreur fréquente est de mettre seulement Btn.Create(Self). En faisant cela, vous provoquez une erreur lors de l'exécution du programme. Si vous l'exécutez maintenant, vous ne verrez pas votre bouton. En fait, il est juste créé en mémoire. Il faut l'afficher. Pour l'afficher, on définit le Parent du composant, c'est-à-dire, le contrôle qui affichera le composant. Dans notre exemple, on choisit encore une fois Form1.

 
Sélectionnez
var
 Btn: TButton;
begin
 Btn := TButton.Create(Self);
 Btn.Parent := Self;
end;

Si vous testez le programme, un bouton apparaîtra dans l'angle en haut à gauche, sans rien d'écrit. On peut changer ses propriétés, comme pour un composant habituel.

Astuce : Au lieu de répéter le nom de la variable à chaque ligne, vous pouvez utiliser With, même pour la première ligne !

 
Sélectionnez
With TButton.Create(self) do begin
  Parent := Self;
  Left := 200;
  {...}
end;

Cela vous fait l'économie d'une variable !

Maitenant, vous voulez peut-être associer une procédure à l'événement OnClick. Il suffit de faire comme cela :

 
Sélectionnez
type
  TForm1 = class(TForm)
    procedure MaProcedure(Sender: TObject); // A ajouter
 {...}

procedure TForm1.MaProcedure(Sender: TObject);
begin
  ShowMessage('Bouton cliqué !');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  With TButton.Create(self) do begin
    Parent := Self;
    // on peut modifier ici d'autres propriétés
    OnClick := MaProcedure;
  end;
end;

end.

Notez qu'il est obligatoire de déclarée la procédure dans type, ce qui est facultatif lors d'une procédure/fonction classique.


précédentsommairesuivant

Copyright © 2005 Laurent Le Brun. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.