📄 aa.pas
字号:
// 异常处理 例
unit AA;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TfmAA = class(TForm)
Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel;
edtA: TEdit;
edtB: TEdit;
edtC: TEdit;
LbR: TLabel;
btnDo: TBitBtn;
procedure btnDoClick(Sender: TObject);
function GetDat(tmp: TEdit): byte;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
fmAA: TfmAA;
ef: boolean;
type
E_My = class(Exception) // 自定义的异常类
Message: String; // 域
// ErrorCode: Integer;
Constructor Create(msg: string); // 构造方法
end;
////////////////////////////////////////////////////////////////////////////////
implementation
{$R *.dfm}
procedure TfmAA.FormCreate(Sender: TObject);
begin
edtA.Text:='11';
edtB.Text:='22';
edtC.Text:='3';
end;
//==============================================================================
function TfmAA.GetDat(tmp: TEdit): byte;
var x: byte;
begin
try
x:=StrToInt(tmp.Text);
if (tmp<>edtC) and (x>100) then //edtA, edtB数据 >100, 当做异常
begin
ef:=ef and False;
raise E_My.Create(tmp.Name[4] +'不能大于100'); // 人为产生一个异常对象(实例)
// tmp.Text:=100;
// x=100;
end
else
Result:=x;
except
On E: E_My do ShowMessage(E.Message); // E是异常类E_My的一个实例
else // 其它异常, 实际只会是'数据范围出界'
begin
tmp.Text:='1';
ShowMessage(tmp.Name[4] +': 数据范围出界 ');
end;
end;
end;
//==============================================================================
procedure TfmAA.btnDoClick(Sender: TObject);
var
ia,ib,ic: byte;
r: Single;
s: string;
begin
s:=(Sender as TButton).Name+'';
ef:=True;
LbR.Caption:='';
ia:=GetDat(edtA);
ib:=GetDat(edtB);
ic:=GetDat(edtC);
if not ef then
Exit;
try
r:=(ia+ib)/ic;
LbR.Caption:=FormatFloat('0.##0',r);
except
On EZeroDivide do // EDivByZero
ShowMessage('除数不能为0 ');
On EMathError do
ShowMessage('错错错错错错 ');
else
ShowMessage('错错错错错错 ');
end;
end;
//============================================================================
//============================================================================
Constructor E_My.Create(msg: string); // 异常类E_My的构造方法
begin
Message:=msg;
end;
procedure TfmAA.Button1Click(Sender: TObject);
var
s: string;
begin
s:=(Sender as TButton).Name+'';
s:=s;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -