¿la excepcion que te salta es "a component called frame2 already exist"?
pues lo que te falta es cambiarles los nombres para que no coincidan.
Puedes hacer varias cosas, es como la creación dinamica de componentes.
EJ:crear varios frames iguales y destruirlos, guardandolos en un array dinamico.
Código:
type
TForm1 = class(TForm)
ButtonCrear: TButton;
ButtonDestruir: TButton;
procedure ButtonCrearClick(Sender: TObject);
procedure ButtonDestruirClick(Sender: TObject);
private
{ Private declarations }
public
framedinamico:array of TFrame2;
end;
var
Form1: TForm1;
implementation
{$R *.xfm}
procedure TForm1.ButtonCrearClick(Sender: TObject);
var ultimo:integer;
begin
ultimo:=length(framedinamico);
SetLength(framedinamico,ultimo+1);
framedinamico[ultimo] :=TFrame2.Create(self);
framedinamico[ultimo].Parent:=self;
framedinamico[ultimo].Align:=alBottom;
framedinamico[ultimo].Name:='dinamico'+inttostr(ultimo);
end;
procedure TForm1.ButtonDestruirClick(Sender: TObject);
var ultimo:integer;
begin
ultimo:=Length(framedinamico)-1;
FreeAndNil(framedinamico[ultimo]);
SetLength(framedinamico,length(framedinamico)-1);
end;
tambien puedes ir metiendolos en un Tlist o simplemente creando y destruyendo el frame anterior si la variable esta ya asignada:
Código:
...
public
miframe:TFrame2;
...
if Assigned(miframe) then
FreeAndNil(miframe);
miframe:=TFrame2.Create(self);
miframe.Parent:=self;