Иллюстрированный самоучитель по Delphi 7 для начинающих

Предотвращение и обработка ошибок

Следующая программа, вид диалогового окна которой приведен на рис. 13.3, а текст – в листинге 13.1, демонстрирует обработку исключений при помощи инструкции try.

Иллюстрированный самоучитель по Delphi 7 для начинающих › Отладка программы › Предотвращение и обработка ошибок
Рис. 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 завершает свою работу.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.