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.
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.