Форум: "Основная";
Текущий архив: 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