Предотвращение и обработка ошибок
Следующая программа, вид диалогового окна которой приведен на рис. 13.3, а текст – в листинге 13.1, демонстрирует обработку исключений при помощи инструкции try.
Рис. 13.3. Диалоговое окно программы
Листинг 13.1. Обработка исключения типа EZeroDivide.
unit UsTry_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs; type TForm1 = class (TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Editl: TEdit; // напряжение Edit2: TEdit; // сопротивление Label5: TLabel; // результат расчета – ток Button1: TButton; //кнопка Вычислить procedure ButtonlClick(Sender: TObject); private { Private declarations) public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var u: real; // напряжение r: real; // сопротивление i: real; // ток begin Labels.Caption: = ' '; try // инструкции, которые могут вызвать исключение (ошибку) u: = StrToFloat(Edit1.Text); r: = StrToFloat(Edit2.Text); i: = u/r; except // секция обработки исключений onEZeroDivide do // деление на ноль begin ShowMessage('Сопротивление не может быть равно нулю!'); exit; end; on EConvertError do // ошибка преобразования строки в число begin ShowMessage('Напряжение и сопротивление должны быть ' + 'заданы числом. ' +#13+ 'При записи дробного числа используйте запятую.'; exit; end; end; Label5.Caption: = FloatToStr(i) + ' A'; end; end.
В приведенной программе исключения могут возникнуть при вычислении величины тока. Если пользователь задаст, что сопротивление равно нулю, то при выполнении инструкции i: = u/r возникает исключение EZeroDivide.
Если неверно будет введено числовое значение, например, для разделения целой и дробной частей числа вместо запятой будет использована точка, то возникнет исключение типа EConvertError. Оба исключения обрабатываются одинаково: выводится сообщение, после чего процедура обработки события Onclick завершает свою работу.