Самоучитель по Delphi 7 для профессионалов


Использование исключительных ситуаций



Если произошла ошибка и возбуждена исключительная ситуация, то она будет обрабатываться по такому алгоритму:

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.


- Начало -  - Назад -  - Вперед -