简易计算器
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

浙公网安备 33010602011771号