Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое создание форм


Pat ©   (2002-10-22 00:48:00) 

Создаю я форму, допустим, form:=TForm.Create(self). Надо ли после ее использования делать form.free, если на событие OnClose написать action:=cafree?
Выписка из хелпа:
caFree The form is closed and all allocated memory for the form is freed.
Неужели все так просто? :-))))

P.S. Гы...ну клинит меня...с кем не бывает :-))


KSergey   (2002-10-22 11:42:00) [1]

KSergey © (22.10.02 10:37)
Описочка как всегда у меня, но тут досадная:
1.Free - вызывается только в не методов формы...


MegaBass   (2002-10-22 11:27:00) [2]

усли делаешь form:=TForm.Create(self) тоесть как Owner-а передаешь self, то при Owner.destroy вызываются Destroy всех компонентов которые принадлежат Owner-у.


KSergey   (2002-10-22 10:37:00) [3]

Есть методы уничтожить форму/освободить память:

1. Free- вызывается только все методов формы (хотя и не совсем так; подробнее можно поискать на форуме - когда-то я это здесь описывал);
2. Release- можно вызвать хоть где, хоть в методе самой формы;
3.В обработчике события OnCloseприсвоить action:=cafree.

В итоге результат будет абсолютно одинаков, причем в случае 3 на самом деле в VCL вызывается Release, а в обработчике сообщения, посылаемого по Release, вызывается Free (причем в методе самой формы!). Впрочем, это уже детали. Важно то, что результат будет одинаков и можно выбирать по вкусу и ситуации.
Ну и не забывать о том, о чем напоминает Rouse_ © (22.10.02 05:05).

PS: надеюсь меня поправят, есл что-то забыл.


sen   (2002-10-22 09:42:00) [4]

2 bis а кто говорит, что надо передавать. Читай внимательнее


Song   (2002-10-22 09:14:00) [5]

После caFree не забудьте указатель объекта сбросить на nil


Bis   (2002-10-22 09:02:00) [6]

Сплошные AV получаются, когда лезешь не в ту память.

И вообще зачем передавать в конструктор Self, если форма убивает саму себя? Даже если и передавать, то обычно Application.


lammoth   (2002-10-22 08:59:00) [7]


> Иногда Action := caFree очень помогает. Если нужно убить
> окно из самого себя. По другому - сплошные AV


А Release не пробовал делать?


Viktor Kushnir   (2002-10-22 08:25:00) [8]

Иногда Action := caFree очень помогает. Если нужно убить окно из самого себя. По другому - сплошные AV


Bsl   (2002-10-22 07:53:00) [9]

Вообще для модальных окон пишется следующим образом:

with TForm.Create(Self) do
try
ShowModal;
if ModalResult = ... ;
finally
Free;
end;


а "action:=cafree" нужен только для дочернх MDI окон.


Rouse_   (2002-10-22 05:05:00) [10]

Если ты в событии OnClose сделаешь action:=cafree то форма и компоненты наследники освободятся (из памяти) не забывай, что экземпляры классов созданные в форме нужно освобождать в ручную

Желаю успехов


Lego   (2002-10-22 04:54:00) [11]

Хмм... интересно... я такого незнал :)
Ну с кем небывет :) век живи век цчись :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо