Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Вниз

Как правильно создать и уничтожить форму 


AndrewK   (2002-01-23 09:54) [0]

Добрый день.

Вопрос такой:

Хочу создать динамически форму, которую принудительно внедряю в панель.

Делаю это так.



public

...
frmCurrent : TForm;
procedure ShowForm (aOwner : TPanel);
procedure CloseForm;

...

end;

procedure TfrmMain.ShowForm (aOwner : TPanel);
begin
frmCurrent.Parent := aOwner;
frmCurrent.Show;
end;

procedure TfrmMain.CloseForm;
begin
frmCurrent.Close;
// !!!
// frmCurrent.Free;
// !!!
frmCurrent.Parent := nil;
end;



В коде по месту создания формы вызываю:



procedure TfrmMain.aNewForm(Sender: TObject);
begin
frmCurrent := TForm1.Create(Self);
ShowForm (pnlWork);
end;

procedure TfrmMain.aClose(Sender: TObject);
begin
CloseForm;
end;



Вопрос в следующем. Форма создается и помещается в панель. Там с ней можно работать. Когда я ее закрываю процедурой CloseForm, то возникают проблемы (закоментированные строки). Я не могу удалить созданную мной форму из памяти методом Free. Работает только Close. Насколько я понимаю Close не удаляет сам объект из памяти а только убирает форму с экрана.

Как мне правильно динамически создать форму, внедрить ее в часть экрана (для чего и использую панель), и правильно удалить и с экрана и из памяти компьютера? Может то что я описал делается как-нибудь по другому?

Заранее благодарен всем отликнувшимся.



Alx2   (2002-01-23 10:01) [1]

Сильно не вникал, но, что сразу видно из приведенного:
frmCurrent.Close;
// !!!
// frmCurrent.Free;
// !!!
frmCurrent.Parent := nil;

Если мы уничтожаем форму, а потом обращаемся к ее свойству parent, то ничего, кроме проблем не выйдет.



Alx2   (2002-01-23 10:09) [2]

Этот вариант работает. Форма "уходит". Только в ShowForm надо проверить, созданна ли frmCurrent.

procedure TfrmMain.CloseForm;
begin
frmCurrent.Free;
end;



AndrewK   (2002-01-23 10:18) [3]

Огромное спасибо. Все работает.

С frmCurrent.Parent := nil; малость лопухнулся.

:)



Belov   (2002-01-23 10:19) [4]

Поставь в Обработчике Close
Action:=caFree
Можно сделать и так
if Assigned(frmCurrent) then FreeAndNill(frmCurrent)
вроде бы так




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.015 c
3-18766           Gonza                 2002-01-12 14:49  2002.02.07  
IBM DB2, Обновление данных после Post?


3-18708           13-ый                 2002-01-09 23:43  2002.02.07  
Подскажите хорошую книжку по Oracle !


1-18833           Lotus                 2002-01-22 10:17  2002.02.07  
Есть две формы, на одной из них Memo на другой Edit


6-18930           VS                    2001-11-16 05:56  2002.02.07  
Все компьютеры в сети


1-18827           Philip                2002-01-25 00:50  2002.02.07  
Не работает Debugger в делфи