简易计算器

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Mask, Menus;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    Button20: TButton;
    Button21: TButton;
    Button22: TButton;
    Button23: TButton;
    MainMenu1: TMainMenu;
    E1: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure Button23Click(Sender: TObject);
    procedure Button22Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

var
  sign: boolean = true;                            //ture表示第一次输入,false表示第二次输入
  str1: string = '0';                              //第一次输入的值
  i: integer = 0;                                  //标识(1)加(2)减(3)乘(4)除
  str2: string = '0';                              //第二次输入的值
  str: string = '0';

{$R *.dfm}

procedure TForm1.Button10Click(Sender: TObject);   //0键按钮
begin
  if sign then                                     //如果是第一次输入
  begin
    if strtofloat(str1) > 0 then                   //判断str1是否全为0
      str1 := str1 + '0';
    Edit1.Text := str1;
  end
  else                                             //否则为第二次输入
  begin
    if strtofloat(str2) > 0 then
      str2 := str2 + '0';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button11Click(Sender: TObject);   //+/-按钮
begin
  if sign then                                     //判断是第几次输入
  begin
    if Pos('-',str1) = 1 then                      //当字符串str1里含符号'-'时
      str1 := Copy(str1,2,length(str1))            //去掉符号'-'
    else
      str1 := '-' + str1;                          //不含符号'-'时,前缀添加'-'
    Edit1.Text := str1;
  end
  else
  begin
    if Pos('-',str2) = 1 then
      str2 := Copy(str2,2,length(str2))
    else
      str2 := '-' + str2;
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button12Click(Sender: TObject);   //点号按钮
begin
  if sign then
    begin
      if Pos('.',str1) > 1 then
        edit1.Text := str1
      else
      begin
        str1 := str1 + '.';
        edit1.Text := str1;
      end;
    end
  else
    begin
      if Pos('.',str2) > 1 then
        edit1.Text := str2
      else
      begin
        str2 := str2 + '.';
        edit1.Text := str2;
      end;
    end;
end;

procedure TForm1.Button13Click(Sender: TObject);   //除法按钮
begin
  i := 4;
  sign := false;
  str2 := '0';
end;

procedure TForm1.Button14Click(Sender: TObject);   //乘法按钮
begin
  i := 3;
  sign := false;
  str2 := '0';
end;

procedure TForm1.Button15Click(Sender: TObject);   //减法按钮
begin
  i := 2;
  sign := false;
  str2 := '0';
end;

procedure TForm1.Button16Click(Sender: TObject);   //加法按钮
begin
  i := 1;
  sign := false;
  str2 := '0';
end;

procedure TForm1.Button17Click(Sender: TObject);   //求平方根
var
  i: real;
begin
  if sign then
  begin
    i := Sqrt(strtofloat(str1));
    str1 := floattostr(i);
    edit1.Text := str1;
  end
  else
  begin
    i := Sqrt(strtofloat(str2));
    str2 := floattostr(i);
    edit1.Text := str2;
  end;
end;

procedure TForm1.Button18Click(Sender: TObject);   //百分号
begin
  if sign then
  begin
    str1 := floattostr(strtofloat(str1)/100);
    if Frac(strtofloat(str1)) = 0 then
      edit1.Text := str1 + '.'
    else
     edit1.Text := str1;
  end
  else
  begin
    str2 := floattostr(strtofloat(str2)/100);
    if Frac(strtofloat(str2)) = 0 then
      edit1.Text := str2 + '.'
    else
     edit1.Text := str2;
  end;
end;

procedure TForm1.Button19Click(Sender: TObject);   //倒数
begin
  if sign then
  begin
    str1 := floattostr(1 / strtofloat(str1));
    edit1.Text := str1;
  end
  else
  begin
    str2 := floattostr(1 / strtofloat(str2));
    edit1.Text := str2;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);    //1键按钮
begin
  if sign then
  begin
    if str1 = '0' then                             //如果str1为0,则清空
      str1 := '';
    str1 := str1 + '1';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '1';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button20Click(Sender: TObject);   //等号按钮
begin
  if str1 <> '0' then
    str := str1;
  case i of
    0:;
    1:str := floattostr(strtofloat(str) + strtofloat(str2));     //加
    2:str := floattostr(strtofloat(str) - strtofloat(str2));     //减
    3:str := floattostr(strtofloat(str) * strtofloat(str2));     //乘
  end;
  edit1.Text := str;
  if i = 4 then                                                  //除
  begin
    if str2 = '0' then                                           //除数为0
    begin
      edit1.Text := '除数不能为零。';
      str1 := '0'
    end
    else
    begin
      str1 := floattostr(strtofloat(str1) / strtofloat(str2));
      edit1.Text := str1;
    end;
  end;
  str1 := '0';
  sign := true;                                                  //设置为第一次输入
end;

procedure TForm1.Button21Click(Sender: TObject);                 //清除全部数据
begin
  str1 := '0';
  str2 := '0';
  str := '0';
  Edit1.Text := str1;
  Edit1.SelStart := 1;
  sign := true;
end;

procedure TForm1.Button22Click(Sender: TObject);                 //回退符
begin
  if sign then                                                   //判断是第几次输入
  begin
    if length(str1) <> 1 then
    begin
      str1 := Copy(str1,1,length(str1)-1);
      edit1.Text := str1;
    end;
  end
  else
  begin
    if length(str1) <> 1 then
    begin
      str2 := Copy(str2,1,length(str2)-1);
      edit1.Text := str2;
    end;
  end;
end;

procedure TForm1.Button23Click(Sender: TObject);                 //纠错键按钮
begin
  if sign then                                                   //判断是第几次输入
  begin
    str1 := '0';
    edit1.Text := str1;
  end
  else
  begin
    str2 := '0';
    edit1.Text := str2;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);   //2键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '2';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '2';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);   //3键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '3';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '3';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);   //4键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '4';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '4';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);   //5键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '5';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '5';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button6Click(Sender: TObject);   //6键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '6';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '6';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button7Click(Sender: TObject);   //7键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '7';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '7';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button8Click(Sender: TObject);   //8键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '8';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '8';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.Button9Click(Sender: TObject);   //9键按钮
begin
  if sign then
  begin
    if str1 = '0' then
      str1 := '';
    str1 := str1 + '9';
    Edit1.Text := str1;
  end
  else
  begin
    if str2 = '0' then
      str2 := '';
    str2 := str2 + '9';
    Edit1.Text := str2;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);     //窗口初始化
begin
  Edit1.Text := str1;                             //默认显示
  Edit1.SelStart := 1;                            //字符插入位置
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);                            //快捷键
begin
  case key of
    VK_BACK:     self.Button22.Click;             //回退
    VK_ADD:      self.Button16.Click;             //加
    VK_SUBTRACT: self.Button15.Click;             //减
    VK_MULTIPLY: self.Button14.Click;             //乘
    VK_DIVIDE:   self.Button13.Click;             //除
    VK_DECIMAL:  self.Button12.Click;             //点
    VK_NUMPAD0:  self.Button10.Click;             //数字键0键
    VK_NUMPAD1:  self.Button1.Click;              //数字键1键
    VK_NUMPAD2:  self.Button2.Click;              //数字键2键
    VK_NUMPAD3:  self.Button3.Click;              //数字键3键
    VK_NUMPAD4:  self.Button4.Click;              //数字键4键
    VK_NUMPAD5:  self.Button5.Click;              //数字键5键
    VK_NUMPAD6:  self.Button6.Click;              //数字键6键
    VK_NUMPAD7:  self.Button7.Click;              //数字键7键
    VK_NUMPAD8:  self.Button8.Click;              //数字键8键
    VK_NUMPAD9:  self.Button9.Click;              //数字键9键
  end;
end;

procedure TForm1.N1Click(Sender: TObject);        //复制
begin
  edit1.SelectAll;
  edit1.CopyToClipboard;
end;

procedure TForm1.N2Click(Sender: TObject);        //粘贴
begin
  edit1.Text := '';
  edit1.PasteFromClipboard;
  edit1.Text := edit1.Text;
end;

end.

 

BorderIcons的biMaximize为False

BorderStyle为bsSingle

keypreview 为true

posted @ 2011-12-07 16:19  endsnow  阅读(235)  评论(0)    收藏  举报