⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aa.pas

📁 delphi的学习资料
💻 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 + -