Форум: "Основная";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизИ всет-таки Release или Free для формы? Найти похожие ветки
← →
gosha73 (2007-03-02 17:26) [0]Привет друзья.
Здалася таким вот вопросом поскольку испытал на себе проблемы при использовании метода Free для формы. Метод Release работает замечательно, никаких AV и проблем.
Но, усомнился только в одном. Все свои формы я создаю с владельцем равным nil, а не Application как это обычно все используют. Не сочтите за рекламу, но почитал вот эту http://delphi.about.com/od/beginners/l/aa070203b.htm статью и теперь в сомнениях весь, потому как там написано:
Caution is needed with a Nil owner, however. You must take care to destroy the form object yourself, using the Free method. If you try to use Release for a form (or any object) with a Nil owner, your program will crash later with an access violation.
Но у меня ни разу не вываливалась программа с AV при таком раскладе, но когда я уничтожаю форму с помощью Free иногда вылазиют AV. Подскажите пожалуйста, кому верить?
Заранее спасибо.
← →
Плохиш © (2007-03-02 17:27) [1]Тебе тоже кусок справки сюда скопировать?
← →
Desdechado © (2007-03-02 17:28) [2]Release в отличие от Free дожидается завершения всех обработчиков формы и только потом ее убивает.
Про nil-хозяина ничего не скажу, практически не использую.
← →
gosha73 (2007-03-02 17:29) [3]Справку читал, поэтому использую Release, но в справке не указано про момент с владельцем формы равным nil.
← →
Плохиш © (2007-03-02 17:39) [4]
> gosha73 (02.03.07 17:29) [3]
> Справку читал, поэтому использую Release, но в справке не
> указано про момент с владельцем формы равным nil.
А что там должно быть указано? В Release посылается себе сообщение, по получению которого, вызывается Free.
А свой вопрос задай автору той статьи, чёй-то у него программа crash-ается, никак из-за ошибки в 17й строке.
← →
DrPass © (2007-03-02 17:43) [5]
> you try to use Release for a form (or any object) with a
> Nil owner, your program will crash later with an access
> violation.
Чушь какая-то. Release делает тот же самый Free, только не напрямую, а посылкой сообщения
← →
gosha73 (2007-03-02 17:50) [6]Да я тоже это понимаю, автор статьи походу прогнал и только других в заблуждение вводит. Хотя и CM_RELEASE тоже не так идеален. Почитал про это сообщение в королевстве дельфи сейчас.
Ну в принципе вопрос для меня закрыт. Всем спасибо.
← →
Плохиш © (2007-03-02 18:40) [7]
> gosha73 (02.03.07 17:50) [6]
Ты про это чтоли?
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1153&mode=print
procedure TForm2.WndProc(var Msg:TMessage);
begin
inherited;
S[2]:="x" {*}
end;
Так всё правильно, в inherited произойдёт вызов обработчика сообения, в котором форма уничтожится с помощью Free. Т.о. получается, что статейка-то лажовая...
АФФтар статейки даже не задумался о том, почему в VCL в WndProc сначала идёт своя обработка, а потом вызов inherited, да и сообщения всегда проверяют.
← →
Плохиш © (2007-03-02 18:44) [8]Там, кстати, в комментариях это написано...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.053 c