![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет, корч не дождался я ответа на прошлую мою тему, решил делать с формами.
План такой: Главная форма (не родитель). На ней панелька и кнопки. Вторая форма (не дочь) с компонентами. Создаётся вручную. Вызов формы: Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(Form2) then
begin
Form2:=TForm2.Create(application);
end;
form2.Parent:=form1.Panel1;
form2.Show;
end;Всё кул. Но как сделать что-бы перед этим панель уничтожала форму которая на ней уже есть? Например хочу отобразить третью форму: Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
{и вот перед показом, нужно выполнить что то типа DestroyComponents только для уничтожения формы, которая на панели}
if not Assigned(Form3) then
begin
Form3:=TForm3.Create(application);
end;
form3.Parent:=form1.Panel1;
form3.Show;
end; |
|
#2
|
||||
|
||||
|
Какие высокие семейные отношения :-) Это панелька на форме, а не наоборот, и у формы есть метод .Free для утилизации
|
|
#3
|
|||
|
|||
|
В таком виде - никак, т.к. нет информации о существующей форме (
точнее, она есть, но добираться неудобно). Сохраняй где-нит указатель на текущую форму. Код:
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; |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Loca (17.01.2016)
| ||
|
#4
|
|||
|
|||
|
Цитата:
Бро, ты лучший!!! Спасибо огромное!!! Всё получилось, работает идеально ![]() |