Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

И всет-таки 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
11-1152569152
ANTPro
2006-07-11 02:05
2007.04.29
Unpacker для KOL


4-1164386044
LexusU
2006-11-24 19:34
2007.04.29
Как получить статус процесса на удаленном компьютере


15-1175840061
Anubis2
2007-04-06 10:14
2007.04.29
Создание текстового файла


5-1152527754
Den_is
2006-07-10 14:35
2007.04.29
Прозрачность в TWinControl


2-1176195245
ba+ya
2007-04-10 12:54
2007.04.29
ShowWindow