![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Цитата:
Бро, ты лучший!!! Спасибо огромное!!! Всё получилось, работает идеально ![]() |