Я столкнулся со следующей проблемой в Delphi с блоком try/except.
У меня есть простое приложение - одна MainForm с именем fr_MAIN и одна TDataModule с именем DM. DM не создается автоматически, но создается во время выполнения в событии fr_MAIN Button2.OnClick:
procedure Tfr_MAIN.Button2Click(Sender: TObject);
begin
try
DM := TDM.Create(nil);
Showmessage('DM started!');
except
on E:Exception do
begin
Showmessage('DM not started!');
end;
end;
DM имеет некоторый код в своем событии OnCreate:
procedure TDM.DataModuleCreate(Sender: TObject);
begin
raise Exception.Create('this is error!');
// DM code here ...
end;
Проблема в том, что когда я нажимаю Button2, я получаю сообщение об исключении 'this is error!', остальная часть DM code here не запускается - что правильно! Но затем я также получаю сообщение 'DM started!' вместо сообщения 'DM not started!'.
Исключение, вызванное DM, прерывает действие, но не перехватывается в блоке except формы!
Почему это?