Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1175578687
Prohodil Mimo
2007-04-03 09:38
2007.04.29
Можно ли на этапе компиляции оцистить Properties компонента?


1-1172838273
Юрий_К
2007-03-02 15:24
2007.04.29
Как дебагить процесс инициализации?


15-1175676092
Real
2007-04-04 12:41
2007.04.29
ICQ - Connection failed


11-1156687886
Александра
2006-08-27 18:11
2007.04.29
KOLListBox


1-1173026527
Bogdan1024
2007-03-04 19:42
2007.04.29
Крутящийся контрол





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский