![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание форм
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]Хмм... интересно... я такого незнал :)
Ну с кем небывет :) век живи век цчись :)