Класс Exception
On EConvertError do begin
Except
Try
//=== Преобразование входных данных ===
a:= StrToFloat(edA.Text); { Текст из поля edA преобразовать в Float }
b:= StrToFloat(edB.Text); { Текст из поля edB преобразовать в Float }
//=== Вычисление ===
if (((a>=0.1)and(a<=1.0)) and ((b>=0.05)and(b<=3.0))) then begin
if (a>=b) then begin
h:= 3.0*a*a - b*b
end
else begin
h:= ln(3.0*a*a - b*b);
end;
lbResult.Caption:= FloatToStr(h);
else begin
{ В заголовок метки lbResult вывести сообщение об ошибке }
lbResult.Caption:= 'Неверные параметры';
end;
MessageBeep(MB_ICONEXCLAMATION);
lbResult.Caption:= 'Неверные параметры';
end;
end;{try}
end;{TMainWindow.btCalcClick}
4.9.5. Вложенные блоки try…except и генерация исключений
Ключевое слово raise используется для генерации исключения, как предопределенного в Delphi, так и своего собственного. Синтаксис оператора генерации исключения:
raise <исключение>
где <исключение> - переменная типа исключения, или
raise <класс исключения>.<конструктор>
Оператор raise прерывает дальнейший нормальный ход вычислений, генерирует экземпляр объекта исключения заданного класса и передает управление ближайшему обработчику соответствующего типа. Обработчик разрушает экземпляр исключения, так что о деструкторе этого объекта заботиться не приходится.
Иногда при обработке исключения возникает потребность повторной генерации исключения того класса. Это может быть связано с тем, что, проведя первичную обработку этого исключения, желательно завершить обработку с помощью обработчика верхнего уровня. Повторная генерация осуществляется оператором raise без каких либо параметров:
raise;
Допустимы вложенные блоки try…except.
Для передачи управления обработчику внешнего блока try…except можно использовать оператор raise без параметров.
Как использовать оператор raise для возбуждения исключения по инициативе приложения (см. пример ниже).
Как уже было сказано исключение это объект класса Exception, точнее одного из его подклассов. Возможно создание своих собственных исключений.
Мы не будем подробно разбирать структуру этого класса, но обратим внимание на некоторые свойства и методы.
Message: PString;
Это свойство содержит текстовую строку – сообщение.
Возможное использование:
...
try
...
except
on e: Exception do { e идентфикатор объекта исключения }
lbResult.Caption: = e. Message;
...