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

Вниз

Обработка exception ов из главного модуля приложения   Найти похожие ветки 

 
Helldriver ©   (2003-04-29 23:34) [0]

Есть приложение, в главном модуле которого (файле проекта) блок CreateForm оформлен в скобки try...except (для отлова эксепшенов, возникающих в процессе создания форм). Сделано это для того, чтобы по критическому эксепшену приложение могло показать юзеру чего-нибудь и вывалиться без продолжения создания остальных форм (создание отражается ProgressBar"ом). Теперь начинается самое интересное - сначало эта констракшн работала... теперь нет! :) Вопрос - что я мог наковырять в настройках Delphi (ибо ни в конструкторы форм, ни в их OnCreate"ы никаких существенных изменений не вносилось и обработчиков ошибок внутри них нет - все должно уходить приложению), что это перестало работать?
Для информации - основным источником эксепшена является TDatabase, связанный через драйвер ODBC с MS SQL Server 7, хотя врядли это поможет :)).


 
Юрий Зотов ©   (2003-04-30 06:40) [1]

Вероятно, где-то, где раньше возникало исключение, был добавлен свой блок try-except без raise. В итоге исключение гасится и во внешний блок не поступает.


 
Helldriver ©   (2003-04-30 19:33) [2]

В том-то и дело, что потенциальные источники эксепшенов своих обработчиков не имеют и, по всем параметрам, возникающее исключение должно передаваться в вызывающий блок, т.е. файл проекта, но этого не происходит. Уже была опробована конструкция с принудительным отловом искючения (т.е. создания обработчика в OnCreate формы вокруг потенциального источника исключения и "генерации исключения по исключению") в любом случае, при компиляции проекта блок except в файле проекта просто игнорируется. Я бы все понял, но ведь работало же!
У меня подозрение, что одной из бессонных ночей я что-то перемудрил в настройках Delphi (ибо, как я уже говорил, существенных изменений со времени тестирования этой конструкции ни в файл проекта ни в обработчики событий создания форм не вносилось), т.к. пробуя совершенно новый проект примерно такого содержания:
Project1.pas:
uses Forms, DBTables, Dialogs, Unit1 in "Unit1.pas";

begin
Application.Initialize;
try
Application.CreateForm(TForm1, Form1);
except
on EDBEngineError do MessageDlg("Error!", mtError, [mbOK], 0);
Application.Terminate;
end;
Application.Run;
end.

Unit1.pas:

procedure TForm1.FormCreate(Sender: TObject);
begin
Database1.Open;
end;

при возникновении исключения получаю тот же результат - оно не ловится. А должно! :)


 
Ученик ©   (2003-05-01 10:53) [3]

Будет ловиться, если в Инспекторе объектов Delphi свойство Database1.Connected = True, а так оно ловиться здесь

{ Forms.pas }

procedure TCustomForm.DoCreate;
begin
if Assigned(FOnCreate) then
try
FOnCreate(Self);
except
if not HandleCreateException then
raise;
end;
if fsVisible in FFormState then Visible := True;
end;



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

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
3-46599
pathfinder
2003-04-23 16:50
2003.05.15
Как загнать картинку в BLOB используя IBX?


4-47043
walruz
2003-03-16 13:38
2003.05.15
Help shellAPI


1-46774
Little Horror
2003-04-29 16:22
2003.05.15
TActionToolBar и TControlBar


1-46697
Nikos
2003-05-02 11:20
2003.05.15
Как закрыть программу?


7-47016
S.A.S
2003-03-20 12:05
2003.05.15
Кем используется COM порт ?