В таком виде - никак, т.к. нет информации о существующей форме (
точнее, она есть, но добираться неудобно). Сохраняй где-нит указатель на текущую форму.
Код:
type
TForm1 = class(TForm)
...
private
ChildForm : TForm
...
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(ChildForm) then
begin
ChildForm.Hide;
ChildForm.Parent := Nil;
FreeAndNil(ChildForm);
end;
ChildForm := TForm2.Create(application);
ChildForm.Parent:=form1.Panel1;
ChildForm.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if not Assigned(ChildForm) then
begin
ChildForm.Hide;
ChildForm.Parent := Nil;
FreeAndNil(ChildForm);
end;
ChildForm := TForm3.Create(application);
ChildForm.Parent:=form1.Panel1;
ChildForm.Show;
end;
Как-то так.
Код сдублировал только для того, что бы было наглядно.
На самом деле можно всеп упаковать в одну процедуру и вызывать ее в разных обработчиках:
Код:
procedure TForm1.ShowChildForm(AForm : TForm);
begin
if not Assigned(ChildForm) then
begin
ChildForm.Hide;
ChildForm.Parent := Nil;
FreeAndNil(ChildForm);
end;
ChildForm := AForm;
ChildForm.Parent:=form1.Panel1;
ChildForm.Show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowChildForm(TForm2.Create(Application));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowChildForm(TForm3.Create(Application));
end;