先上图:
程序下载地址:http://115.com/file/e65jc1au
unit uForm_Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Math ; type TForm_Main = class(TForm) edt_Mon: TEdit; btn_N1: TButton; btn_N2: TButton; btn_N3: TButton; btn_N4: TButton; btn_N5: TButton; btn_N6: TButton; btn_N7: TButton; btn_N8: TButton; btn_N9: TButton; btn_N0: TButton; btn_NR: TButton; btn_NC: TButton; btn_NA: TButton; btn_NS: TButton; btn_NM: TButton; btn_ND: TButton; btn_NDot: TButton; btn_Backspace: TButton; MainMenu1: TMainMenu; F1: TMenuItem; X1: TMenuItem; H1: TMenuItem; A1: TMenuItem; Button1: TButton; Button2: TButton; procedure btn_N1Click(Sender: TObject); procedure btn_N2Click(Sender: TObject); procedure btn_N3Click(Sender: TObject); procedure btn_N4Click(Sender: TObject); procedure btn_N5Click(Sender: TObject); procedure btn_N6Click(Sender: TObject); procedure btn_N7Click(Sender: TObject); procedure btn_N8Click(Sender: TObject); procedure btn_N9Click(Sender: TObject); procedure btn_N0Click(Sender: TObject); procedure btn_NDotClick(Sender: TObject); procedure btn_BackspaceClick(Sender: TObject); procedure X1Click(Sender: TObject); procedure btn_NAClick(Sender: TObject); procedure btn_NCClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btn_NSClick(Sender: TObject); procedure btn_NMClick(Sender: TObject); procedure btn_NDClick(Sender: TObject); procedure btn_NRClick(Sender: TObject); procedure A1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form_Main: TForm_Main; temp1:real; //中间变量,存储临时数据 temp2:real; //中间变量,存储临时数据 result:real; //中间变量,存储运算结果数据 n:integer; //判断用户选择的操作符类型,1、2、3、4分别代表加、减、乘、除 Flag:Boolean; //判断是否为第二个被操作数的第一个数字,用于在输入操作符后,显示第一个被操作数,而不是将editbox清空。 {变量初始化在CreateForm事件里面} implementation uses uFomr_About; {$R *.dfm} procedure TForm_Main.btn_N1Click(Sender: TObject); begin if Flag then //如果点击了操作符(+-*/),则Flag为真,且这时是输入第二个被操作数的第一个字符 begin edt_Mon.Text:= '1'; Flag:= False; end else if edt_Mon.Text <> '0' then //如果文本框里非0,就在string后面加1个'1' edt_Mon.Text:= edt_Mon.Text + '1' else //如果文本框里为0,清空再追加'1',不然就会显示'01'了,很丑。后面的2~9butten不重复说 begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '1' end; end; procedure TForm_Main.btn_N2Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '2'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '2' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '2' end; end; procedure TForm_Main.btn_N3Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '3'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '3' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '3' end; end; procedure TForm_Main.btn_N4Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '4'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '4' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '4' end; end; procedure TForm_Main.btn_N5Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '5'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '5' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '5' end; end; procedure TForm_Main.btn_N6Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '6'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '6' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '6' end; end; procedure TForm_Main.btn_N7Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '7'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '7' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '7' end; end; procedure TForm_Main.btn_N8Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '8'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '8' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '8' end; end; procedure TForm_Main.btn_N9Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '9'; Flag:= False; end else if edt_Mon.Text <> '0' then edt_Mon.Text:= edt_Mon.Text + '9' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '9' end; end; procedure TForm_Main.btn_N0Click(Sender: TObject); begin if Flag then begin edt_Mon.Text:= '0'; Flag:= False; end else if edt_Mon.Text <> '0' then //在text不是'0'的情况下,末尾添加0,不然就会出现'000'的现象,这个可不是我们想要显示出来的数 edt_Mon.Text:= edt_Mon.Text + '0' else begin edt_Mon.Clear; edt_Mon.Text:= edt_Mon.Text + '0' end; end; procedure TForm_Main.btn_NDotClick(Sender: TObject); begin if (edt_Mon.GetTextLen > 0) and //text里面没有值就不输入,有值才可驶入'.' (Pos('.', edt_Mon.Text) = 0) then //一个数里面不能有多个点,只有在text中找不到'.'的情况下,才可以添加'.' edt_Mon.Text:= edt_Mon.Text + '.'; end; procedure TForm_Main.btn_BackspaceClick(Sender: TObject); begin edt_Mon.Text:= COPY(edt_Mon.Text,1,length(edt_Mon.Text) -1); //自己修改自己值后,赋给自己。就是把text的最后一个字符给删掉 end; procedure TForm_Main.X1Click(Sender: TObject); begin Application.Terminate; //终止程序 end; procedure TForm_Main.btn_NAClick(Sender: TObject); begin n:= 1; // 加法,操作标识为1,供“等号” 事件使用 Flag:=True; // 点了加好后,flag为真,为了在点击+后不清楚text,没办法,老婆要求 temp1:= strtofloat(edt_Mon.Text); //点了+后,把第一个被操作数存起来,-、*、/以此类推 end; procedure TForm_Main.btn_NCClick(Sender: TObject); begin edt_Mon.Text:='0'; //AC清零,所有变量重置为0 temp1:= 0; temp2:= 0; result:= 0; n:= 0; Flag:=False; end; procedure TForm_Main.FormCreate(Sender: TObject); //窗口创建时,初始化变量 begin edt_Mon.Text:='0'; temp1:= 0; temp2:= 0; result:= 0; n:= 0; Flag:=False; end; procedure TForm_Main.btn_NSClick(Sender: TObject); begin n:= 2; Flag:=True; temp1:= strtofloat(edt_Mon.Text); end; procedure TForm_Main.btn_NMClick(Sender: TObject); begin n:= 3; Flag:=True; temp1:= strtofloat(edt_Mon.Text); end; procedure TForm_Main.btn_NDClick(Sender: TObject); begin n:= 4; Flag:=True; temp1:= strtofloat(edt_Mon.Text); end; procedure TForm_Main.btn_NRClick(Sender: TObject); //等号事件 begin temp2:= strtofloat(edt_Mon.Text); //操作前,先把第二个被操作数存进变量 case n of //+、-、*、/ 1、2、3、4 1:result:= temp1 + temp2; 2:result:= temp1 - temp2; 3:result:= temp1 * temp2; 4:if temp2 = 0 then Showmessage('除数不可以为0!') else result:= temp1 / temp2; end; edt_Mon.Text:= floattostr(result); end; procedure TForm_Main.A1Click(Sender: TObject); begin Form_About.ShowModal; end; end.
unit uFomr_About; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm_About = class(TForm) Label1: TLabel; Label2: TLabel; btn_Back: TButton; Memo1: TMemo; Label3: TLabel; procedure btn_BackClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form_About: TForm_About; implementation {$R *.dfm} procedure TForm_About.btn_BackClick(Sender: TObject); begin Close; end; end.