Creation dynamique de controles

Description

Un petit exemple sur comment créer des composants controles dynamiquement, et cela en n'utilisant qu'un seul tableau de stockage.
La même méthode peut être utilisé avec des composants qui ne sont pas dérivés de TControl. Il suffit de prendre un ancetre des composants voulus comme base du tableau dynamique.

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button5: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  VertPos:integer;
  Form1: TForm1;
  Objects: array of TControl;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if length(Objects)=0 then
    VertPos:=20;
  setlength(Objects,length(Objects)+1);
  Objects[length(Objects)-1]:=TLabel.create(Application);
  (Objects[length(Objects)-1] as TLabel).Parent:=Form1;
  (Objects[length(Objects)-1] as TLabel).Name:='Label'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TLabel).Caption:='Label'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TLabel).Top:=VertPos;
  (Objects[length(Objects)-1] as TLabel).Left:=20;
  VertPos:=VertPos+20;
  end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if length(Objects)=0 then
    VertPos:=20;
  setlength(Objects,length(Objects)+1);
  Objects[length(Objects)-1]:=TButton.create(Application);
  (Objects[length(Objects)-1] as TButton).Parent:=Form1;
  (Objects[length(Objects)-1] as TButton).Name:='Button'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TButton).Caption:='Button'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TButton).Top:=VertPos;
  (Objects[length(Objects)-1] as TButton).Left:=20;
  VertPos:=VertPos+30;
  end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if length(Objects)=0 then
    VertPos:=20;
  setlength(Objects,length(Objects)+1);
  Objects[length(Objects)-1]:=TMemo.create(Application);
  (Objects[length(Objects)-1] as TMemo).Parent:=Form1;
  (Objects[length(Objects)-1] as TMemo).Name:='Memo'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TMemo).Text:='Memo'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TMemo).Top:=VertPos;
  (Objects[length(Objects)-1] as TMemo).Left:=20;
  VertPos:=VertPos+95;
  end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if length(Objects)=0 then
    VertPos:=20;
  setlength(Objects,length(Objects)+1);
  Objects[length(Objects)-1]:=TEdit.create(Application);
  (Objects[length(Objects)-1] as TEdit).Parent:=Form1;
  (Objects[length(Objects)-1] as TEdit).Name:='Edit'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TEdit).Text:='Edit'+inttostr(length(Objects)-1);
  (Objects[length(Objects)-1] as TEdit).Top:=VertPos;
  (Objects[length(Objects)-1] as TEdit).Left:=20;
  VertPos:=VertPos+30;
  end;

procedure TForm1.Button5Click(Sender: TObject);
var
  iloop:integer;
begin
  for iloop:=0 to length(Objects)-1 do
    Objects[iloop].Free;
  Setlength(Objects,0);
  end;

End.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (Icebird)