Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

Как избежать варинига при создании объекта в try finally   Найти похожие ветки 

 
Игорь Шевченко ©   (2006-05-26 12:27) [40]


> TFileStream при отсутствии файлов


Получу.


> TForm при недостатке оконных ресурсов


Не получу


> TBrush - при недостатке граф. ресурсов


Не получу


 
Zz_   (2006-05-26 12:44) [41]

Взлетит :)


 
Fay ©   (2006-05-26 13:17) [42]

Удалено модератором


 
jack128 ©   (2006-05-26 15:58) [43]

Игорь Шевченко ©   (26.05.06 12:27) [40]
> TForm при недостатке оконных ресурсов

Не получу


procedure TWinControl.CreateWnd;
begin
...
   CreationControl := Self;
   CreateWindowHandle(Params);
   if FHandle = 0 then
     RaiseLastOSError; //!!!!!!!!!
...
end; Отсюда следует, что если хендл не удаётся создать - будет поднято исключение.

constructor TForm2.Create(AOwner: TComponent);
begin
 inherited;
 ShowMessage(BoolToStr(HandleAllocated, True)); //  Выведет True.  Следовательно в конструкторе была попытка создать хендл. Удачная попытка.
end;

Игорь Шевченко ©   (26.05.06 12:27) [40]
> TBrush - при недостатке граф. ресурсов

Не получу

Хм. Да, тут поторопился.


 
jack128 ©   (2006-05-26 16:00) [44]

jack128 ©   (26.05.06 15:58) [43]
constructor TForm2.Create(AOwner: TComponent);
begin
inherited;
ShowMessage(BoolToStr(HandleAllocated, True)); //  Выведет True.  Следовательно в конструкторе была попытка создать хендл. Удачная попытка.
end;


А!!! Черт, и здесь облажался.


 
Игорь Шевченко ©   (2006-05-26 16:01) [45]

jack128 ©   (26.05.06 15:58) [43]


> Отсюда следует, что если хендл не удаётся создать - будет
> поднято исключение


С этим никто не спорит. Но это произойдет не в конструкторе формы, если она не visible.


 
jack128 ©   (2006-05-26 16:43) [46]

Ладно, чтоб уж совсем не чувствовать себя проигравшим в споре отмечу, что при создании _любого_ объекта можно получить исключение.  EOutOfMemory  :-)


 
Джо ©   (2006-05-26 16:45) [47]

> что при создании _любого_ объекта можно получить исключение.
> EOutOfMemory  :-)

Вот только есть сомнение, что это исключение удастся корректно обработать :)


 
Игорь Шевченко ©   (2006-05-26 16:45) [48]

jack128 ©   (26.05.06 16:43) [46]

Женя, а спора, собстна никакого нету. Я никоим боком не хочу убедить кого-то не использовать исключения в конструкторах. Просто я могу повторить, что поиском наиболее распространенных приемов программирования я занимаюсь в исходниках VCL, кстати, там на EOutOfMemory конструируемые объекты не проверяются :)


 
Сергей М. ©   (2006-05-26 16:46) [49]


> jack128 ©   (26.05.06 16:43) [46]


> можно получить исключение.  EOutOfMemory


Запросто.
Так что правда и на твоей стороне)


 
Жуков Олег   (2006-05-26 21:36) [50]

Простой способ получить Exception в конструкторе любого компонента. Вполне вероятный.

 SomeComponent1: TSomeComponent;
 SomeComponent2: TSomeComponent;

 SomeComponent1 := TSomeComponent.Create(nil);
 ...
 SomeComponent1.Free();
 ...
 SomeComponent2 := TSomeComponent.Create(SomeComponent1);


 
novill ©   (2006-05-29 10:40) [51]

Так как же все-таки правильно делать?


 
Palladin ©   (2006-05-29 11:18) [52]


> novill ©   (29.05.06 10:40) [51]

obj:=TObj.Create;
Try
Finally
obj.Free;
End;



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.01 c
2-1151055789
KVN
2006-06-23 13:43
2006.07.09
Про таблицы и PageControl


6-1141205541
Владимир__
2006-03-01 12:32
2006.07.09
WebBrowser и картинки


15-1149761362
Layner
2006-06-08 14:09
2006.07.09
Хочу написать "Электронный термометр", как лучше сделать


15-1149942229
Victor_Mw
2006-06-10 16:23
2006.07.09
Время работы проги в Delphi - Console Application??


2-1151047825
KygECHuK
2006-06-23 11:30
2006.07.09
Работа с TChart





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский