hola. Prueba esto a ver si te sirve...
Código Delphi
[-]
...
public
obj : array of TButton;
idx : integer;
...
procedure TForm1.Button1Click(Sender: TObject);
var
cnt : integer;
begin
SetLength(obj,idx+1);
try
obj[idx] := TButton.Create(self);
obj[idx].Name := 'boton'+inttostr(idx);
obj[idx].Parent := self;
obj[idx].Left := (sender as TButton).Left + 10;
obj[idx].Top := (sender as TButton).Top + 10;
obj[idx].Width := (sender as TButton).Width;
obj[idx].Height := (sender as TButton).Height;
obj[idx].Caption := Obj[idx].Name;
obj[idx].Visible := true;
obj[idx].Enabled := true;
obj[idx].OnClick := (sender as TButton).OnClick;
ShowMessage(obj[idx].Caption);
inc(idx);
except
raise exception.Create('error creando nuevo boton');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(obj,1);
idx := 0;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i : integer;
begin
for i := idx - 1 to 0 do
obj[i].free;
setlength(obj,0);
end;
es probable, no obstante, que haya maneras mas elegantes.
saludos
PD : releyendo, vi que es un 'GridPanel' y no un 'Panel'.
No conozco ese componente asi que quiza este codigo no te sirva. Bueno, igualmente te lo dejo por si sí lo hace