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

Вниз

Как избежать варинига при создании объекта в 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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.034 c
1-1148482331
Aleksandr.
2006-05-24 18:52
2006.07.09
Как корректно терминировать нить с GetMessage?


2-1150797351
Unknowing
2006-06-20 13:55
2006.07.09
Файлы данных


2-1150964235
Кирилл Таран
2006-06-22 12:17
2006.07.09
Как сделать анимацию?


11-1129737524
thaddy
2005-10-19 19:58
2006.07.09
Worse, it is a general bug!


2-1150962324
Mozgan
2006-06-22 11:45
2006.07.09
как записать компакт средствами windows XP на delphi?