Показать сообщение отдельно
  #3  
Старый 16.01.2016, 19:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,102
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В таком виде - никак, т.к. нет информации о существующей форме (
точнее, она есть, но добираться неудобно). Сохраняй где-нит указатель на текущую форму.

Код:
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;
Ответить с цитированием