Обработчики try-блока в виде зарегистрированной функции Назад В начало Вперед
<обработчик-try-блока> = _try (<Функция>) <оператор>
  [<блок-обработки-исключения>] [<блок-очистки>];

Для описания обработчика необходимо создать функцию типа TTryBlockfunction:

TTryBlockfunction = function (aPhase : TExceptionPhase;
						const aExceptionId : TExceptionIdRec
							 ) : TExceptionHookReturn;

TExceptionPhase - стадия обработки, для который вызывается обработчик:

ExpBeforeTry

Перед вызовом операторов try-блока

ExpAfterTry

После вызова операторов try-блока, но перед _finally. Если обработчик выдал ErStop, то эта фаза игнорируется

ExpBeforeExcept

Перед обработкой исключения в except-блоке

ExpAfterExcept

После обработки исключения в except-блоке

ExpBeforeFinally

Перед обработкой _finally

ExpAfterFinally

После обработки _finally

ExpAfterAll

После всей обработки try-блока

В фазах ExpBeforeExcept и ExpAfterExcept в обработчик передается идентификатор исключения aExceptionId типа TExceptionIdRec:

TExceptionIdRec = object
	Group : integer; { группа исключений }
	Id : integer; { конкретный элемент }
	function  System : boolean; { Системное исключение, }
								{ а не пользовательское }
end;

Результатом функции является набор значений типа TExceptionHookReturn:

ErDefault

Обработчик не влияет на работу try-блока.

ErStop

Прекратить работу try-блока. При использовании в ExpBeforeTry, ExpBeforeExcept и ExpAfterExcept, идет на _finally; При использовании в ExpBeforeFinally прерывает finally-блок.

ErDoRetry

Продолжить работу программы после исключения оператором _retry. Используется во время значения ExpBeforeExcept, ExpAfterExcept.

Обработчик исключения необходимо зарегистрировать:

Registerfunction('MyExceptionHandler', @MyExceptionHandler,
				ftByte,
				Chr(ftByte) + Chr(ftLongInt));