用Delphi做计算器

用Delphi做计算器,第1张

var
Form1: TForm1;
i,j,k:real;
jia,jian,cheng,chu,dengyu:Boolean;
a,zf:Boolean;
implementation
{$R dfm}
procedure TForm1Button1Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='1'
else MaskEdit1Text:=maskEdit1Text+'1';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button2Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='2'
else MaskEdit1Text:=MaskEdit1Text+'2';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button3Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='2'
else MaskEdit1Text:=MaskEdit1Text+'3';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button4Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='4'
else MaskEdit1Text:=MaskEdit1Text+'4';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button5Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='5'
else MaskEdit1Text:=MaskEdit1Text+'5';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button6Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='6'
else MaskEdit1Text:=MaskEdit1Text+'6';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button7Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='7'
else MaskEdit1Text:=MaskEdit1Text+'7';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button8Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='8'
else MaskEdit1Text:=MaskEdit1Text+'8';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button9Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='9'
else MaskEdit1Text:=MaskEdit1Text+'9';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button10Click(Sender: TObject);
begin
if a=True
then
begin
MaskEdit1Clear;
a:=False;
end;
if MaskEdit1Text='0'
then MaskEdit1Text:='0'
else MaskEdit1Text:=MaskEdit1Text+'0';
j:=StrToFloat(MaskEdit1Text);
end;
procedure TForm1Button13Click(Sender: TObject);
begin
a:=True;
jia:=True;
jian:=False;
cheng:=False;
chu:=False;
i:=StrToFloat(MaskEdit1text);
end;
procedure TForm1Button20Click(Sender: TObject);
begin
dengyu:=True;
a:=True;
MaskEdit1Clear;
if jia=True
then MaskEdit1Text:=FloatToStr(i+j)
else if jian=True
then MaskEdit1Text:=FloatToStr(i-j)
else if cheng=True
then MaskEdit1Text:=FloatToStr(ij)
else if chu=True
then
if j<>0
then MaskEdit1Text:=FloatToStr(i/j)
else ShowMessage('0不能做除数');
end;
procedure TForm1FormCreate(Sender: TObject);
begin
a:=False;
jia:=False;
jian:=False;
cheng:=False;
chu:=False;
MaskEdit1Text:='0';
end;
procedure TForm1Button14Click(Sender: TObject);
begin
a:=True;
jia:=False;
jian:=True;
cheng:=False;
chu:=False;
i:=StrToFloat(MaskEdit1text);
end;
procedure TForm1Button15Click(Sender: TObject);
begin
a:=True;
jia:=False;
jian:=False;
cheng:=True;
chu:=False;
i:=StrToFloat(MaskEdit1text);
end;
procedure TForm1Button16Click(Sender: TObject);
begin
a:=True;
jia:=False;
jian:=False;
cheng:=False;
chu:=True;
i:=StrToFloat(MaskEdit1text);
end;
procedure TForm1Button17Click(Sender: TObject);
var
s:string;
begin
MaskEdit1Text:=copy(MaskEdit1Text,1,length(MaskEdit1Text)-1);
with MaskEdit1 do
begin
if (Text='')
then Text:='0';
end;
end;
procedure TForm1Button18Click(Sender: TObject);
begin
a:=True;
jia:=True;
jian:=False;
cheng:=False;
chu:=False;
i:=0;
j:=0;
MaskEdit1Text:='0';
end;
procedure TForm1Button11Click(Sender: TObject);
begin
zf:=True;
zf:=not zf;
if zf=True
then MaskEdit1Text:=FloatToStr(0+StrToFloat(maskedit1Text))
else MaskEdit1Text:=FloatToStr(0-StrToFloat(maskedit1Text));

end;
procedure TForm1Button12Click(Sender: TObject);
begin
MaskEdit1Text:=MaskEdit1Text+'';
end;
procedure TForm1Button19Click(Sender: TObject);
begin
a:=True;
MaskEdit1Text:=FloatToStr(1/strtofloat(MaskEdit1Text));
end;
procedure TForm1N2Click(Sender: TObject);
begin
Button13Click;
end;
procedure TForm1N3Click(Sender: TObject);
begin
Button14Click;
end;
procedure TForm1N4Click(Sender: TObject);
begin
Button15Click;
end;
procedure TForm1N5Click(Sender: TObject);
begin
Button16Click;
end;
procedure TForm1N10Click(Sender: TObject);
begin
Button20Click;
end;
procedure TForm1N7Click(Sender: TObject);
begin
ApplicationCreateForm(tForm2,form2);
Form2ShowModal;
end;
procedure TForm1N8Click(Sender: TObject);
begin
Form3ShowModal;
//ApplicationMessageBox('这也要帮助!你也太没水平了吧!','鄙视你',MB_OK);
end;
procedure TForm1MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
//如果用户输入的不是0-9,退格键和回车键则输入的字符无效
if not (Key in['0''9',#8,#13])
then key:=#0;
end;
procedure TForm1FormKeyPress(Sender: TObject; var Key: Char);
begin
if Length(MaskEdit1Text)>30
then
begin
if Key=#8
then Button17Click;
Key:=#0;
end;
Form1KeyPreview:=True;
if Key in ['1']
then Button1Click
else if Key in['2']
then Button2Click
else if Key in['3']
then Button3Click
else if Key in['4']
then Button4Click
else if Key in['5']
then Button5Click
else if key in ['6']
then Button6Click
else if Key in ['7']
then Button7Click
else if key in ['8']
then Button8Click
else if key in ['9']
then button9Click
else if key in ['0']
then button10Click
else if Key=#107
then Button13Click
else if Key=#109
then Button14Click
else if Key=#106
then Button15Click
else if Key=#111
then Button16Click
else if Key in [#103,#13,#187]
then Button20Click
else if Key =#8
then Button17Click
else if Key =#46
then button18Click;
end;
end

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, Menus;
type
TForm1 = class(TForm)
Edit1: TEdit;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton15: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton18: TSpeedButton;
SpeedButton19: TSpeedButton;
SpeedButton20: TSpeedButton;
SpeedButton21: TSpeedButton;
SpeedButton5: TSpeedButton;
MainMenu1: TMainMenu;
zhua1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
SpeedButton22: TSpeedButton;
N4: TMenuItem;
procedure SpeedButton20Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure SpeedButton13Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton14Click(Sender: TObject);
procedure SpeedButton15Click(Sender: TObject);
procedure SpeedButton17Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton19Click(Sender: TObject);
procedure SpeedButton11Click(Sender: TObject);
procedure SpeedButton18Click(Sender: TObject);
procedure SpeedButton21Click(Sender: TObject);
procedure SpeedButton16Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure SpeedButton22Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
//将窗体变量放置在这里也可以,这样如果有
//Form2就无法访问
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
flag : Integer =0;
flag1: Integer =0; // 是否复位的标记
flag3: Integer =0; //小数点的标记
Temp1: string = '';
Temp2: real=0; //注意变量的定义
implementation
{$R dfm}
procedure TForm1SpeedButton20Click(Sender: TObject);
begin
if SpeedButton20Caption = '关闭' then
begin
SpeedButton20Caption := '打开' ;
SpeedButton20FontColor := clGreen
end
else
begin
SpeedButton20Caption := '关闭';
SpeedButton20FontColor := clSilver
end;
end;
procedure TForm1SpeedButton1Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1=5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'1';flag1 := 0;
end
end;
procedure TForm1SpeedButton2Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text :='';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'2'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton3Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text := Edit1text+'3'; flag1:=0;
end;
end;
procedure TForm1SpeedButton4Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text := Edit1text+'4'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton6Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text:=Edit1text+'5'; flag1:=0;
end;
end;
procedure TForm1SpeedButton7Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'6'; flag1:=0;
end;
end;
procedure TForm1SpeedButton13Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'7'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton12Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text:=Edit1text+'8'; flag1:=0;
end;
end;
procedure TForm1SpeedButton14Click(Sender: TObject);
begin
Edit1FontColor := clBlack; //为每个Button恢复颜色 目的是区分数据是结果还是参加数
if flag1=5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text := Edit1text+'9'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton15Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'0'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton17Click(Sender: TObject);
begin
Edit1Clear;
flag := 0;
flag1 := 5; // 是否复位的标记
flag3 :=0; //小数点的标记
Temp1 := '';
Temp2 :=0; //注意变量的定义
end;
procedure TForm1SpeedButton5Click(Sender: TObject);
begin
Edit1FontColor := Clgreen; //设置输入颜色
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')
and(edit1text<>'')
then
begin
try //仅仅作为实验,记住使用的格式
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2 := StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
Edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
Edit1FontColor:=clblack;
end;
end;
else
Temp2:=StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 1;
flag1 := 5;
Edit1Text := '+';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton19Click(Sender: TObject);
begin
Edit1FontColor := Clgreen;
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')and(edit1text<>'')
then //当前里面的字符为 + - / 不能够进行运算
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 :
begin
if StrTofloat(edit1text)<>0 then Temp2 := StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
Edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
Edit1FontColor:=clblack;
end;
end;
else
Temp2:=StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 2;
flag1 := 5;
Edit1Text := '-';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton11Click(Sender: TObject);
begin
Edit1FontColor:=Clgreen;
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')and(edit1text<>'') then
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 :=StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2:=StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
edit1FontColor:=clblack;
end;
end;
else
Temp2 := StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 3;
flag1 := 5;
Edit1Text := '';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton18Click(Sender: TObject);
begin
Edit1FontColor := Clgreen;
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')
and (edit1text<>'') then
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2 := StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
edit1FontColor:=clblack;
end;
end;
else
Temp2 := StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 4;
flag1 := 5;
Edit1Text := '/';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton21Click(Sender: TObject);
begin
if messagedlg('是否退出',mtconfirmation,[Mbyes,Mbno],0) = mryes then
close;
end;
procedure TForm1SpeedButton16Click(Sender: TObject);
begin
if flag1<>5 then
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2:=StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
Edit1FontColor:=ClLime;
showmessage('错误!除数不能够为0!');
end;
end;
else
Temp2:=StrToFloat(Edit1Text); //如果直接按=号,那么显示第一个数
//即把第一个数赋给第二个数
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
flag:=0;
if Edit1FontColor=ClLime then Edit1FontColor := clBlack
else Edit1FontColor := clred ;
Edit1Text:=FloatToStr(Temp2);
end;
flag1 := 5;
flag3 := 0;
end;
procedure TForm1N1Click(Sender: TObject);
begin
SpeedButton20Caption := '打开';
N3Caption := '状态/on'
end;
procedure TForm1SpeedButton22Click(Sender: TObject);
begin
Edit1FontColor := ClBlack;
if flag1 = 5 then //出现结果指点点小数点 会置0,避免这个情况先清空
// 然后设置 flag1:=0; 这样数字可以跟着后面输入
begin
Edit1Text := '';
flag1 := 0;
end;
if (SpeedButton20Caption='打开') and ( flag3=0) then
begin
if Edit1Text = '' then
Edit1Text := '0'+''+Edit1text //如果直接点小数点的BUTTON 则在前面加0
else
Edit1Text := Edit1text+'';
end;
Inc(flag3,1); //统计小数、点的个数
// 注意可以用inc(flag3,1)每次 加1 inc(flag3,1)每次加5
//Dec (flag,1)是减减1
end;
procedure TForm1N2Click(Sender: TObject);
begin
SpeedButton20Caption := '关闭' ;
N3Caption := '状态/off';
end;
procedure TForm1FormCreate(Sender: TObject);
begin
N3Caption := '状态/on';
flag1:=5;
end;
procedure TForm1N4Click(Sender: TObject);
begin
close;
end;
procedure TForm1Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then SpeedButton16Click; // VK_RETURN为ENTER的虚拟值
//还有其他方法可以实现
end;
procedure TForm1Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'1' : SpeedButton1Click;
'2' : SpeedButton2Click;
'3' : SpeedButton3Click;
'4' : SpeedButton4Click;
'5' : SpeedButton6Click;
'6' : SpeedButton7Click;
'7' : SpeedButton13Click;
'8' : SpeedButton12Click;
'9' : SpeedButton14Click;
'0' : SpeedButton15Click;
'' : SpeedButton22Click;
'+' : SpeedButton5Click;
'-' : SpeedButton19Click;
'' : SpeedButton11Click;
'/' : SpeedButton18Click;
end;
end;
end

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, Menus;
type
TForm1 = class(TForm)
Edit1: TEdit;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton15: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton18: TSpeedButton;
SpeedButton19: TSpeedButton;
SpeedButton20: TSpeedButton;
SpeedButton21: TSpeedButton;
SpeedButton5: TSpeedButton;
MainMenu1: TMainMenu;
zhua1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
SpeedButton22: TSpeedButton;
N4: TMenuItem;
procedure SpeedButton20Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure SpeedButton13Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton14Click(Sender: TObject);
procedure SpeedButton15Click(Sender: TObject);
procedure SpeedButton17Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton19Click(Sender: TObject);
procedure SpeedButton11Click(Sender: TObject);
procedure SpeedButton18Click(Sender: TObject);
procedure SpeedButton21Click(Sender: TObject);
procedure SpeedButton16Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure SpeedButton22Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
//将窗体变量放置在这里也可以,这样如果有
//Form2就无法访问
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
flag : Integer =0;
flag1: Integer =0; // 是否复位的标记
flag3: Integer =0; //小数点的标记
Temp1: string = '';
Temp2: real=0; //注意变量的定义
implementation
{$R dfm}
procedure TForm1SpeedButton20Click(Sender: TObject);
begin
if SpeedButton20Caption = '关闭' then
begin
SpeedButton20Caption := '打开' ;
SpeedButton20FontColor := clGreen
end
else
begin
SpeedButton20Caption := '关闭';
SpeedButton20FontColor := clSilver
end;
end;
procedure TForm1SpeedButton1Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1=5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'1';flag1 := 0;
end
end;
procedure TForm1SpeedButton2Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text :='';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'2'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton3Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text := Edit1text+'3'; flag1:=0;
end;
end;
procedure TForm1SpeedButton4Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text := Edit1text+'4'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton6Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text:=Edit1text+'5'; flag1:=0;
end;
end;
procedure TForm1SpeedButton7Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'6'; flag1:=0;
end;
end;
procedure TForm1SpeedButton13Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'7'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton12Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text:=Edit1text+'8'; flag1:=0;
end;
end;
procedure TForm1SpeedButton14Click(Sender: TObject);
begin
Edit1FontColor := clBlack; //为每个Button恢复颜色 目的是区分数据是结果还是参加数
if flag1=5 then Edit1Text := '';
if SpeedButton20Caption='打开' then
begin
Edit1Text := Edit1text+'9'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton15Click(Sender: TObject);
begin
Edit1FontColor := clBlack;
if flag1 = 5 then Edit1Text := '';
if SpeedButton20Caption = '打开' then
begin
Edit1Text := Edit1text+'0'; flag1 := 0;
end;
end;
procedure TForm1SpeedButton17Click(Sender: TObject);
begin
Edit1Clear;
flag := 0;
flag1 := 5; // 是否复位的标记
flag3 :=0; //小数点的标记
Temp1 := '';
Temp2 :=0; //注意变量的定义
end;
procedure TForm1SpeedButton5Click(Sender: TObject);
begin
Edit1FontColor := Clgreen; //设置输入颜色
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')
and(edit1text<>'')
then
begin
try //仅仅作为实验,记住使用的格式
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2 := StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
Edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
Edit1FontColor:=clblack;
end;
end;
else
Temp2:=StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 1;
flag1 := 5;
Edit1Text := '+';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton19Click(Sender: TObject);
begin
Edit1FontColor := Clgreen;
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')and(edit1text<>'')
then //当前里面的字符为 + - / 不能够进行运算
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 :
begin
if StrTofloat(edit1text)<>0 then Temp2 := StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
Edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
Edit1FontColor:=clblack;
end;
end;
else
Temp2:=StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 2;
flag1 := 5;
Edit1Text := '-';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton11Click(Sender: TObject);
begin
Edit1FontColor:=Clgreen;
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')and(edit1text<>'') then
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 :=StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2:=StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
edit1FontColor:=clblack;
end;
end;
else
Temp2 := StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 3;
flag1 := 5;
Edit1Text := '';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton18Click(Sender: TObject);
begin
Edit1FontColor := Clgreen;
if (edit1Text<>'+') and (edit1Text<>'-')and (edit1Text<>'') and (edit1Text<>'/')
and (edit1text<>'') then
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2 := StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
edit1FontColor:=clLime;
showmessage('错误!除数不能够为0!');
edit1FontColor:=clblack;
end;
end;
else
Temp2 := StrToFloat(Edit1text);
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
Temp1 := FloatToStr(Temp2);
if edit1FontColor=clblack then
begin
Temp1:=FloatToStr(Temp2);
Edit1Text := Temp1;
flag1 := 5;
flag := 0;
flag3 := 0;
end ;
if edit1FontColor=clgreen then
begin
flag := 4;
flag1 := 5;
Edit1Text := '/';
flag3 := 0;
end;
end;
end;
procedure TForm1SpeedButton21Click(Sender: TObject);
begin
if messagedlg('是否退出',mtconfirmation,[Mbyes,Mbno],0) = mryes then
close;
end;
procedure TForm1SpeedButton16Click(Sender: TObject);
begin
if flag1<>5 then
begin
try
case flag of //切记case 不支持字符型
1 : Temp2 := StrTofloat(Temp1)+StrTofloat(Edit1text) ;
2 : Temp2 := StrTofloat(Temp1)-StrTofloat(Edit1text) ;
3 : Temp2 := StrTofloat(Temp1)StrTofloat(Edit1text) ;
4 : begin
if StrTofloat(edit1text)<>0 then Temp2:=StrTofloat(Temp1)/StrTofloat(Edit1text)
else
begin
Edit1FontColor:=ClLime;
showmessage('错误!除数不能够为0!');
end;
end;
else
Temp2:=StrToFloat(Edit1Text); //如果直接按=号,那么显示第一个数
//即把第一个数赋给第二个数
end;
except
ShowMessage('错误!您输入的数据过大');
Form1close;
end;
flag:=0;
if Edit1FontColor=ClLime then Edit1FontColor := clBlack
else Edit1FontColor := clred ;
Edit1Text:=FloatToStr(Temp2);
end;
flag1 := 5;
flag3 := 0;
end;
procedure TForm1N1Click(Sender: TObject);
begin
SpeedButton20Caption := '打开';
N3Caption := '状态/on'
end;
procedure TForm1SpeedButton22Click(Sender: TObject);
begin
Edit1FontColor := ClBlack;
if flag1 = 5 then //出现结果指点点小数点 会置0,避免这个情况先清空
// 然后设置 flag1:=0; 这样数字可以跟着后面输入
begin
Edit1Text := '';
flag1 := 0;
end;
if (SpeedButton20Caption='打开') and ( flag3=0) then
begin
if Edit1Text = '' then
Edit1Text := '0'+''+Edit1text //如果直接点小数点的BUTTON 则在前面加0
else
Edit1Text := Edit1text+'';
end;
Inc(flag3,1); //统计小数、点的个数
// 注意可以用inc(flag3,1)每次 加1 inc(flag3,1)每次加5
//Dec (flag,1)是减减1
end;
procedure TForm1N2Click(Sender: TObject);
begin
SpeedButton20Caption := '关闭' ;
N3Caption := '状态/off';
end;
procedure TForm1FormCreate(Sender: TObject);
begin
N3Caption := '状态/on';
flag1:=5;
end;
procedure TForm1N4Click(Sender: TObject);
begin
close;
end;
procedure TForm1Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then SpeedButton16Click; // VK_RETURN为ENTER的虚拟值
//还有其他方法可以实现
end;
procedure TForm1Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'1' : SpeedButton1Click;
'2' : SpeedButton2Click;
'3' : SpeedButton3Click;
'4' : SpeedButton4Click;
'5' : SpeedButton6Click;
'6' : SpeedButton7Click;
'7' : SpeedButton13Click;
'8' : SpeedButton12Click;
'9' : SpeedButton14Click;
'0' : SpeedButton15Click;
'' : SpeedButton22Click;
'+' : SpeedButton5Click;
'-' : SpeedButton19Click;
'' : SpeedButton11Click;
'/' : SpeedButton18Click;
end;
end;
end
参考>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12847512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存