Листинг 13.1. Обработка исключения типа eZeroDivide
unit
Unit1;
interface
uses
Windows,
Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1
= class(TForm)
Edit1:
TEdit;
Edit2:
TEdit;
Label1:
TLabel;
Label2:
TLabel;
Label3:
TLabel;
Label4:
TLabel;
Button1:
TButton;
procedure
Button1Click(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
Label4.Caption
:= ' ';
try
//
инструкции, которые могут вызвать
исключение (ошибку)
u
:= StrToFloat(Edit1.Text);
r
:= StrToFloat(Edit2.Text);
i
:= u/r;
except
// секция обработки исключений
on
EZeroDivide do // деление
на
ноль
begin
ShowMessage('Сопротивление
не может быть равно нулю!');
exit;
end;
on
EConvertError do // ошибка преобразования строки
в число
begin
ShowMessage('Напряжение
и сопротивление должны быть ' +
'заданы
числом. ' +#13+
'При
записи дробного числа используйте
запятую.');
exit;
end;
end;
Label4.Caption
:= FloatToStr(i) + ' A';
end;
end.
В
приведенной программе исключения могут
возникнуть при вычислении величины
тока. Если пользователь задаст, что
сопротивление равно нулю, то при
выполнении инструкции i:=u/r возникает
Исключение EZeroDivide.
15