Я приведу пример фрагмента программы, ниже будет дано подробное описание данного фрагмента.
try
A := StrToInt (Input.Text);
except
ShowMessage (‘Ошибка ввода целого числа!!!’);
Input.SelectAll;
Exit;
end;
В данном фрагменте программы с помощью зарезервированных слов try, except и end реализуется так называемый защищённый блок. Такими блоками программист может защитить программу от краха от ошибки.
После слова try ставится выражение, которое необходимо выполнить в программе. В данном случае программа пробует с помощью функции StrToInt преобразовать строковое значение из текстового поля с именем Input в целое значение.
Защита действует следующим образом:
Если при выполнении операторов, расположенных после слова try, была обнаружена ошибка, то выполняются операторы, расположены после слова except. Если ошибка не обнаружена, то выполняются операторы, следующие после слова end. В данном случае с помощью функции ShowMessage программа выводит сообщение с указанным текстом, после чего программа выделяет содержимое текстового поля и предлагает ввести ошибочное значение заново.
Ошибочным значением может быть: строковое значение, дробное значение или вообще не введённое значение.
Другой вариант обработки исключительных ситуаций:
try
finally
end;
В данном случае выполнится в любом случае, но при ошибке в управление будет передано .
Конструкцию finally…end удобно использовать, например, при загрузке из файла изображения в TBitMap.
Например:
procedure TForm1.Button1Click(Sender: TObject);
var
bitmap: TBitMap;
begin
bitmap := TBitMap.Create;
try
bitmap.LoadFromFile(‘bitmap.bmp’);
Canvas.Draw(bitmap);
finally
bitmap.Free;
end;
end;
Вначале bitmap инициируется с помощью конструктора Create. Затем в теле программы в bitmap загружается изображение из файла. Даже при возникновении ошибки необходимо вызвать деструктор класса с помощью метода Free. Поэтому для этого используется конструкция finally…end.
Иногда программе необходимо самостоятельно вызвать исключение. Для этого используется зарезервированное слово raise.
Вообще, для обработки исключительных ситуаций используется класс TException, а также его многочисленные потомки.
Инициировать исключение можно так:
try
x := StrToInt(st);
if x < 0 then raise EAbort.Create('Число меньше нуля!'); except ShowMessage(‘Ошибка!!!’); end; В этом случае при ошибке преобразования строки в число появится сообщение об ошибке, а также при отрицательном числе программа вызывает собственное исключение, при этом также появится сообщение об ошибке.