Главная страница
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.028 c
2-1176377740
I-New
2007-04-12 15:35
2007.04.29
Динамическая загрузка картинок в TimageList


2-1176390032
Roman_S
2007-04-12 19:00
2007.04.29
простой примерчик проверки пароля при запуске


2-1175775557
leonidus
2007-04-05 16:19
2007.04.29
Глюки с отображением формы


1-1173073600
lyudmila
2007-03-05 08:46
2007.04.29
настройка StringGrid


2-1175968783
Степан
2007-04-07 21:59
2007.04.29
Утекает память? али нет...