Главная страница
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.048 c
15-1150107969
Иксик
2006-06-12 14:26
2006.07.09
День России


15-1149760910
Kolan
2006-06-08 14:01
2006.07.09
Каналы для обнаружения аккустического сигнала.


2-1150379275
XTD
2006-06-15 17:47
2006.07.09
Знает ли кто прог. которая следит за изменениями в регистре?


2-1150804461
resuS
2006-06-20 15:54
2006.07.09
Задача на вычисление выражения записанного в строке


2-1151069374
drashka
2006-06-23 17:29
2006.07.09
Шаблон ввода (Caption) из Database Editor