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

📄 unit1.pas

📁 简单的计算器
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, XPMan, StdCtrls,Math;

type
  TForm1 = class(TForm)
    ShowE: TEdit;
    MainMenu1: TMainMenu;
    XPManifest1: TXPManifest;
    N1: TMenuItem;
    C1: TMenuItem;
    N2: TMenuItem;
    H1: TMenuItem;
    N3: TMenuItem;
    A1: TMenuItem;
    NM3: TButton;
    NM2: TButton;
    NM1: TButton;
    NM6: TButton;
    NM5: TButton;
    NM4: TButton;
    NM9: TButton;
    NM8: TButton;
    NM7: TButton;
    Point: TButton;
    NM0: TButton;
    Add: TButton;
    Result: TButton;
    Reduce: TButton;
    Divide: TButton;
    Multiply: TButton;
    Restar: TButton;
    Negative: TButton;
    procedure NM1Click(Sender: TObject);
    procedure RestarClick(Sender: TObject);
    procedure NM2Click(Sender: TObject);
    procedure NM3Click(Sender: TObject);
    procedure NM4Click(Sender: TObject);
    procedure NM5Click(Sender: TObject);
    procedure NM6Click(Sender: TObject);
    procedure NM7Click(Sender: TObject);
    procedure NM8Click(Sender: TObject);
    procedure NM9Click(Sender: TObject);
    procedure AddClick(Sender: TObject);
    procedure ResultClick(Sender: TObject);
    procedure ReduceClick(Sender: TObject);
    procedure MultiplyClick(Sender: TObject);
    procedure DivideClick(Sender: TObject);
    procedure NM0Click(Sender: TObject);
    procedure NegativeClick(Sender: TObject);
    procedure PointClick(Sender: TObject);
    procedure C1Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }

  public
    { Public declarations }
   procedure DoResult;
   procedure DoNumber(N:integer);


  end;

var
  Form1: TForm1;

implementation
var number1,number2,R : double;
    status,operate,P,HadR: integer;
    MySender: TObject;

{$R *.dfm}



{**********************************数字按钮响应********************************}
procedure TForm1.NM1Click(Sender: TObject);
begin
DoNumber(1);
end;


procedure TForm1.NM2Click(Sender: TObject);
begin
 DoNumber(2);
end;


procedure TForm1.NM3Click(Sender: TObject);
begin
DoNumber(3);
end;


procedure TForm1.NM4Click(Sender: TObject);
begin
DoNumber(4);
end;


procedure TForm1.NM5Click(Sender: TObject);
begin
DoNumber(5);
end;


procedure TForm1.NM6Click(Sender: TObject);
begin
DoNumber(6);
end;


procedure TForm1.NM7Click(Sender: TObject);
begin
DoNumber(7);
end;


procedure TForm1.NM8Click(Sender: TObject);
begin
DoNumber(8);
end;


procedure TForm1.NM9Click(Sender: TObject);
begin
DoNumber(9);
end;


procedure TForm1.NM0Click(Sender: TObject);
begin
DoNumber(0);
end;


{************************************数字按钮响应总函数************************}
procedure TForm1.DoNumber(N: integer);
begin
if HadR=1 then RestarClick(self);
if p=0 then
 case status of
1:begin number1:=number1*10+N;
        ShowE.Text:=floattostr(number1);
  end;
2: begin
    number2:=number2*10+N;
    ShowE.Text:=floattostr(number2);
    end;
  end
else
 case status of
1:begin number1:=number1+N*power(0.1,p);
        ShowE.Text:=floattostr(number1);
        p:=p+1;
  end;
2: begin
    number2:=number2+N*power(0.1,p);
        ShowE.Text:=floattostr(number2);
        p:=p+1;
    end;
  end;
end;


{******************************************等号响应****************************}
procedure TForm1.DoResult;
begin
case operate of
1:R:=number1+number2;
2:R:=number1-number2;
3:R:=number1*number2;
4:begin if number2=0
 then showmessage('分母不能为零!')
 else R:=number1/number2;
 end;
end;
 status:=1;
 number1:=R;
 number2:=0;
 P:=0;
 HadR:=1;
 ShowE.Text:=floattostr(R);
end;

procedure TForm1.ResultClick(Sender: TObject);
begin
DoResult;
end;


{***************************************重置函数*******************************}
procedure TForm1.RestarClick(Sender: TObject);
begin
number1:=0;
number2:=0;
R:=0;
status:=1;
operate:=0;
ShowE.Text:='0';
p:=0;
HadR:=0;
Result.SetFocus;
MySender:=Sender;
end;




{*****************************************操作按钮*****************************}
procedure TForm1.AddClick(Sender: TObject);
begin
if number2<>0 then
  DoResult;
operate:=1;
status:=2;
p:=0;
HadR:=0;
end;


procedure TForm1.ReduceClick(Sender: TObject);
begin
if number2<>0 then
  DoResult;
operate:=2;
status:=2;
p:=0;
HadR:=0;
end;


procedure TForm1.MultiplyClick(Sender: TObject);
begin
if number2<>0 then
  DoResult;
operate:=3;
status:=2;
p:=0;
HadR:=0;
end;


procedure TForm1.DivideClick(Sender: TObject);
begin
if number2<>0 then
  DoResult;
operate:=4;
status:=2;
p:=0;
HadR:=0;
end;




{**********************************正负掉换************************************}
procedure TForm1.NegativeClick(Sender: TObject);
begin
case status of
1: begin number1:=-number1; ShowE.Text:=FloatToStr(number1); end;
2: begin number2:=-number2; ShowE.Text:=FloatToStr(number2); end;
end;
end;

{******************************小数点******************************************}
procedure TForm1.PointClick(Sender: TObject);
begin
if p<>0 then showMessage('非法输入!')
else
begin
p:=1;
HadR:=0;
end;
end;

{*********************************键盘响应*************************************}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of
VK_NUMPAD0: DoNumber(0);
VK_NUMPAD1: DoNumber(1);
VK_NUMPAD2: DoNumber(2);
VK_NUMPAD3: DoNumber(3);
VK_NUMPAD4: DoNumber(4);
VK_NUMPAD5: DoNumber(5);
VK_NUMPAD6: DoNumber(6);
VK_NUMPAD7: DoNumber(7);
VK_NUMPAD8: DoNumber(8);
VK_NUMPAD9: DoNumber(9);
VK_MULTIPLY: Form1.Multiply.Click;
VK_ADD: Form1.Add.Click;
VK_SUBTRACT: Form1.Reduce.Click;
VK_SEPARATOR: Form1.Divide.click;
VK_DECIMAL: Form1.Point.click;
VK_RETURN	: Form1.Result.Click;
end;
end;

{***************************************其他***********************************}
procedure TForm1.C1Click(Sender: TObject);
begin
showE.CopyToClipboard;
end;



end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -