Использование исключительных ситуаций Если произошла ошибка и возбуждена исключительная ситуация, то она будет обрабатываться по такому алгоритму:
1. Если ситуация возникла внутри блока try..except, то там она и будет обработана. Если ИС "продвинута" дальше при помощи оператора raise, а также если она возникла в блоке try. .finally, обработка продолжается.
2. Если программистом определен обработчик события Application.onException, то он получит управление. Обработчик объявлен следующим образом:
TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;
3. Если программист никак не определил реакцию на ИС, то будет вызван стандартный метод showException, который сообщит о классе и месте возникновения исключительной ситуации.
Пункты 2 и 3 реализуются в методе TAppiication.HandieException. Собственно, выглядят они следующим образом:
if not (ExceptObject is EAbort) then
if Assigned(FOnException) then
FOnException(Sender, Exception(ExceptObject))
else
ShcwExceptior. (Exception(ExceptObject));
Обработчик onExceptiоn нужен, если требуется выполнять одно и то же действие в любой исключительной ситуации, возникшей в вашем приложении. К примеру, назвать себя, указать координаты для обращения или предупредить, что это еще бета-версия.
program Project!;
uses
Forms,
SysUtils, //добавлено вручную — там описан класс Exception Dialogs,
Unitl in 'Unitl.pas' {Forml};
{$R *.RES}
type
TExceptClass = class
public
procedure GlobalExceptionHandler(Sender: TObject; E:Exception);
end;
procedure TExceptClass.GlobalExceptionHandler(Sender: TObject;
E:Exception);
begin
ShowMessage('Произошла исключительная ситуация ' + E.ClassName
+ ': ' + E.Message
+ #13#10'Свяжитесь с разработчиками по тел. 222-33-44');
end;
begin
with TExceptClass.Create do
begin
Application.OnException := GlobalExceptionHandler;
Application.Initialize;
Application.CreateFormfTForml, Forml);
Application.Run;
Free;
end;
end.