我最近在编写一个简易计算器,但我想能做个和windows计算器里那样,可以保存结果一直加下去或者减下去,比如说4+5=9 再按等号就14 19 24 再按减3就有21 18 
我就不会怎样写如何保存这临时结果 ,不过我这个程序就加第一个数 比如说4+5=9 再按等号就变成13 17 21 
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;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;
    Label1: TLabel;
    Label2: TLabel;
    SpeedButton1: TSpeedButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button16Click(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 Button10Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  i:integer;
  temp1:string;
  temp2:real;
  temp3:string;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'0';
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1';
end;procedure TForm1.Button16Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'2';
end;procedure TForm1.Button3Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'3';
end;procedure TForm1.Button4Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'4';
end;procedure TForm1.Button5Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'5';
end;procedure TForm1.Button6Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'6';
end;procedure TForm1.Button7Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'7';
end;procedure TForm1.Button8Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'8';
end;procedure TForm1.Button9Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'9';
end;procedure TForm1.Button10Click(Sender: TObject);
begin
  i:=1;
  temp1:=edit1.Text;
  edit1.Clear;
end;procedure TForm1.Button17Click(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'.';
end;procedure TForm1.Button15Click(Sender: TObject);
begin
  edit1.Text:='';
end;procedure TForm1.Button11Click(Sender: TObject);
begin
  i:=2;
  temp1:=edit1.Text;
  edit1.Clear;
end;procedure TForm1.Button12Click(Sender: TObject);
begin
  i:=3;
  temp1:=edit1.Text;
  edit1.Clear;
end;procedure TForm1.Button13Click(Sender: TObject);
begin
  i:=4;
   temp1:=edit1.Text;
   edit1.Clear;
end;procedure TForm1.Button14Click(Sender: TObject);
begin
  case i of
  1:temp2:=strtofloat(temp1)+strtofloat(edit1.Text);
  2:temp2:=strtofloat(temp1)-strtofloat(edit1.Text);
  3:temp2:=strtofloat(temp1)*strtofloat(edit1.Text);
  4:if strtofloat(edit1.Text)=0 then
    showmessage('除数不可为0')
      else
        temp2:=strtofloat(temp1)/strtofloat(edit1.Text);
  end;
  edit1.Text:=floattostr(temp2);
end;procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   speedbutton1.Down:=true;
  if speedbutton1.Down=true then
   edit1.SetFocus;
end;end.
请问我应该怎样编 越详细越好

解决方案 »

  1.   

    你可以再有一状态位,如果‘+’,‘-’,‘*’,'除'按下就是true,Button14Click后就是false,做是否是直接click的Button14的控制,再執行Button14Click就好了
      

  2.   

    你这样有些費事,完全可以‘0’-‘9’的數字按鈕調用同一按鈕,你显示的按鈕肯定是‘0’-‘9’啊,用
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       edit1.Text:=edit1.Text+ (sender as TButton).Caption;
    end;
    不就省事了嗎
      

  3.   

    中午搞了一下,差不多吧。你看看的,
    var
      Form1: TForm1;
      str1,t,str2:string;
      clicked:boolean;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      if ((sender as TButton).Caption)='C' then
        edit1.Text:=''
      else if ((sender as TButton).Caption)='.' then
      begin
        if pos('.',edit1.Text)=0 then
          edit1.Text:=edit1.Text+ (sender as TButton).Caption;
      end
      else if (length(edit1.Text)=0) and  ((sender as TButton).Caption='0') then
        edit1.Text:=''
      else
        edit1.Text:=edit1.Text+ (sender as TButton).Caption;
    end;procedure TForm1.Button11Click(Sender: TObject);
    begin
      if length(edit1.Text)<>0 then
        str1:=edit1.Text
      else
        str1:='0';
      edit1.Text:='';
      t:= (sender as TButton).Caption ;
      clicked:=true;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      clicked:=false;
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin  if clicked then
      begin
        str2:=edit1.Text;
        if t='+' then
          edit1.text:=floattostr(strtofloat(str1)+strtofloat(edit1.text))
        else if t='-' then
          edit1.text:=floattostr(strtofloat(str1)-strtofloat(edit1.text))
        else if t='*' then
          edit1.text:=floattostr(strtofloat(str1)*strtofloat(edit1.text))
        else if t='/' then
        begin
          if edit1.Text<>'0' then
            edit1.text:=floattostr(strtofloat(str1) / strtofloat(edit1.text));
        end;
      end
      else
      begin
        if t='+' then
          edit1.text:=floattostr(strtofloat(edit1.text)+strtofloat(str2))
        else if t='-' then
          edit1.text:=floattostr(strtofloat(edit1.text)-strtofloat(str2))
        else if t='*' then
          edit1.text:=floattostr(strtofloat(edit1.text)*strtofloat(str2))
        else if t='/' then
        begin
          if edit1.Text<>'0' then
            edit1.text:=floattostr(strtofloat(edit1.text)-strtofloat(str2));
        end;
      end;
      clicked:=false;
    end;
      

  4.   

    怎么都是我呢?唉
    這句有小毛病
     if (length(edit1.Text)=0) and  ((sender as TButton).Caption='0') then
        edit1.Text:='' 
    本來是不想輸入0123...的,但是就不能輸入0.123的小數了,你自己看看的吧,思路差不多吧
      

  5.   

    你这个虽然可以做出计算器,但没有微软计算器那种效果,就是我在内容所说的。你看一下我们windows xp 自配的计算器 你发现它的效果就是我前面说的内容,我想是保存临时数据再循环运行,但不知如何写代码 好郁闷 想请教你一下
      

  6.   

    如果是輸入,如‘10’,再‘-’,再‘2’,最后按‘=’,再一直按‘=’,是可以返回正確的值的,你把email留下,我把代碼給你,你再看看的
    var
      Form1: TForm1;
      str1,t,str2:string;
      clicked:boolean;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);      //' C' ,'.','0','1','2,','3'...'9'
    begin
      if ((sender as TButton).Caption)='C' then
        edit1.Text:=''
      else if ((sender as TButton).Caption)='.' then
      begin
        if pos('.',edit1.Text)=0 then
          edit1.Text:=edit1.Text+ (sender as TButton).Caption;
      end
      else if (length(edit1.Text)=1) and  (edit1.Text='0') and ((sender as TButton).Caption<>'.') then  else
        edit1.Text:=edit1.Text+ (sender as TButton).Caption;
    end;procedure TForm1.Button11Click(Sender: TObject);    //'+','-','*','/'
    begin
      if length(edit1.Text)<>0 then
        str1:=edit1.Text
      else
        str1:='0';
      edit1.Text:='';
      t:= (sender as TButton).Caption ;
      clicked:=true;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      clicked:=false;
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin  if clicked then
      begin
        str2:=edit1.Text;
        if t='+' then
          edit1.text:=floattostr(strtofloat(str1)+strtofloat(edit1.text))
        else if t='-' then
          edit1.text:=floattostr(strtofloat(str1)-strtofloat(edit1.text))
        else if t='*' then
          edit1.text:=floattostr(strtofloat(str1)*strtofloat(edit1.text))
        else if t='/' then
        begin
          if edit1.Text<>'0' then
            edit1.text:=floattostr(strtofloat(str1) / strtofloat(edit1.text))
          else
            edit1.Text:='0';
        end;
      end
      else
      begin
        if t='+' then
          edit1.text:=floattostr(strtofloat(edit1.text)+strtofloat(str2))
        else if t='-' then
          edit1.text:=floattostr(strtofloat(edit1.text)-strtofloat(str2))
        else if t='*' then
          edit1.text:=floattostr(strtofloat(edit1.text)*strtofloat(str2))
        else if t='/' then
        begin
          if edit1.Text<>'0' then
            edit1.text:=floattostr(strtofloat(edit1.text)/strtofloat(str2))
          else
            edit1.Text:='0';
        end;
      end;
      clicked:=false;
    end;procedure TForm1.Button16Click(Sender: TObject);
    begin
    showmessage(floattostr(strtofloat('0123')));
    end;
      

  7.   

    [email protected] 这是我邮箱 谢啦