捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:Calculator 计算器 v2.0
sncelsve 37160 2009/4/10 17:43:41
这个计算器计算是有问题的
liese 36630 2009/1/8 13:53:47
smithgeorge等你的方法出來,學習學習啊
canghesoft 27222 2006/11/19 15:32:03
操作误.1+2+3+4+5+6+7+8+9=应该是45,结果只是17,按'+'时没有即时计算。
smithgeorge 14600 2005/5/8 18:42:03
最近我编了一个使用表达式来完成类。可识别+,—,*,%,/,tan,cos,.....等运算符。只是还有点bug.等搞定后在放上来。
zongwen2000 13518 2005/3/25 9:17:56
能用几句语句就把计算器调出来么?
wsf1128 13487 2005/3/24 11:15:44
支持yinhong_2003你的看法
yinhong_2003 12371 2005/2/2 0:47:48
真是多此一举
这么简单的程序。写出那么多的代码你要比篇幅啊。
用Button的公共事件不就OK了。看看我写的跟你几乎完成差不的功能但是比你简单多了
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Label1: TLabel;
    GroupBox2: TGroupBox;
    btn_8: TButton;
    btn_7: TButton;
    btn_2: TButton;
    btn_Dot: TButton;
    btn_1: TButton;
    btn_zf: TButton;
    btn_9: TButton;
    btn_5: TButton;
    btn_3: TButton;
    btn_0: TButton;
    btn_6: TButton;
    btn_4: TButton;
    btn_qk: TButton;
    btn_jian: TButton;
    btn_dy: TButton;
    btn_cheng: TButton;
    btn_tg: TButton;
    btn_jia: TButton;
    btn_chu: TButton;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure btn_0tobtn9(Sender: TObject);
    procedure btn_DotClick(Sender: TObject);
    procedure btn_0Click(Sender: TObject);
    procedure btn_qkClick(Sender: TObject);
    procedure btn_tgClick(Sender: TObject);
    procedure btn_zfClick(Sender: TObject);
    procedure jisuan(Sender: TObject);
    procedure btn_dyClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    Chucuen: Real;
    jld,jlzf: Integer;  //声明记录小数点和+/-的次数变量
    jl_jjccfh: String;  //记录+,-,*,/号
    jl_jjccEX: Boolean; //记录是否按下+ - * /
    jl_Change: Integer; //记录label1.captin 的文字变化
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  MessageBox(0,
          '本小程序用途不大' + #13#10 + '是我学Delphi练手的作品' +
          '供大家对照源文件学习参考' + #13#10 +
          '唐伯虎点雯香 QQ:47406310' + #13#10 +
          'E_mail:yinhong_2003@163.com',
          'Information',
          MB_OK + MB_ICONINFORMATION);
  caption := '简易计算器 作者:唐伯虎点雯香';
  label1.Font.Color := clred;
  edit1.Text := '0';
  edit1.ReadOnly := true;
  edit1.Enabled := false;
  Chucuen := 0;
  jl_jjccEX := false;
  jl_jjccfh := ';
  timer1.Interval := 300;
  timer1.Enabled := true;
  form1.Left := (Screen.Width - form1.Width) div 2;
  form1.Top := (Screen.Height - form1.Height) div 2;

end;

procedure TForm1.btn_0tobtn9(Sender: TObject);
begin
  if jl_jjccEX = true then
    begin
      edit1.Text := ';
      jl_jjccEX := false;
    end;
  if edit1.Text = '0' then 
    edit1.Text := ';
  edit1.Text := edit1.Text + (Sender as TButton).Caption; //1TO9的公共事件


end;

procedure TForm1.btn_DotClick(Sender: TObject);
begin
  if jld = 1 then          //如果小数点以用则结束
    exit;
    if length(edit1.Text) < 1 then
      begin
        edit1.Text := '0' + '.';
        inc(jld);          //记录小数点次数
      end
    else
      begin
        edit1.Text := edit1.text + '.';
        inc(jld);          //记录小数的次数
      end;
end;

procedure TForm1.btn_0Click(Sender: TObject);
begin
    if jl_jjccEX = true then
    begin
      edit1.Text := ';
      jl_jjccEX := false;
    end;
  if edit1.Text = '0' then  //如果为0按0则为0
    edit1.Text := '0'
      else          //如果不为的情况
        edit1.Text := edit1.Text + '0';
  if jl_jjccfh = '/' then
  begin
    MessageBox(Handle,
          '除数为0无意义',
          '简易计算器提示',
          MB_OK + MB_ICONEXCLAMATION);
    jl_jjccfh := ';
    edit1.Text := '0';
  end;

end;

procedure TForm1.btn_qkClick(Sender: TObject);
begin
{各变量重新赋值}
  Chucuen := 0;
  jld := 0; //如每次退格到0则,给记录小数点的变量重新赋值
  jlzf:= 0; //如每次退格到0则,给记录+/-的变量重新赋值
  edit1.Text := '0';
  jl_jjccEX := false;
end;

procedure TForm1.btn_tgClick(Sender: TObject);
begin
{判断格到一位时候为0}
  if (Length(edit1.Text) = 2) and (Copy(edit1.Text,1,1) = '-') then
    edit1.Text := '0';  //如果为负数则退到2位时再退为0
  if edit1.Text = '0' then
    begin
      edit1.Text := '0';
      jld := 0; //如每次退格到0则,给记录小数点的变量重新赋值
      jlzf:= 0; //如每次退格到0则,给记录+/-的变量重新赋值
    end
      else
        if Length(edit1.Text) = 1 then
          begin
          edit1.Text := '0';
          jld:= 0;  //如每次退格到0则,给记录小数点的变量重新赋值
          jlzf:= 0; //如每次退格到0则,给记录+/-的变量重新赋值
          end
          else  //取edit1.text第二位起始edit1.text - 1的文本
          edit1.Text := Copy(edit1.Text,1,Length(edit1.Text) - 1);


end;

procedure TForm1.btn_zfClick(Sender: TObject);
{处理+/-的事件}
var zf: string; //声明局部变量储存插入+/-
begin
  Inc(jlzf);
  zf := edit1.Text;
  if jlzf mod 2 <> 0 then
    if edit1.Text <> '0' then
      begin
        Insert('-',zf,1);
        edit1.Text := zf;
      end;
  if jlzf mod 2 = 0 then
    if Copy(edit1.Text,1,1) = '-' then
      edit1.Text := Copy(edit1.Text,2,Length(edit1.Text) - 1);





end;


procedure TForm1.jisuan(Sender: TObject);
begin
  jl_jjccEX := true;
  Chucuen := StrToFloat(edit1.Text);
  if (Sender as TButton).Caption = '+' then
    jl_jjccfh := '+';          //记录+号
  if (Sender as TButton).Caption = '-' then
    jl_jjccfh := '-';          //记录-号
  if (Sender as TButton).Caption = '*' then
    jl_jjccfh := '*';          //记录*号
  if (Sender as TButton).Caption = '/' then
    jl_jjccfh := '/';          //记录/号


end;
{执行计算的过程}
procedure TForm1.btn_dyClick(Sender: TObject);
begin
  try //除0的错误避免
  if jl_jjccfh = '+' then          //得出+的结果
    edit1.Text := FloatToStr(Chucuen + StrToFloat(edit1.Text));
  if jl_jjccfh = '-' then          //得出-的结果
    edit1.Text := FloatToStr(Chucuen - StrToFloat(edit1.Text));
  if jl_jjccfh = '*' then          //得出*的结果
    edit1.Text := FloatToStr(Chucuen * StrToFloat(edit1.Text));
  if jl_jjccfh = '/' then          //得出/的结果
    edit1.Text := FloatToStr(Chucuen / StrToFloat(edit1.Text));
  except
    MessageBox(Handle,
          '发生异常错误' + #13#10 + '可能被除数是0'+
          #13#10 + '或除数是0',
          '起点简易计算器Error',
          MB_OK + MB_ICONERROR);
  end;


end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(jl_Change);
  if jl_Change > 8 then
    jl_Change := 0;
  case jl_Change of
    1: label1.Font.Color := clRed;
    2: label1.Font.Color := clBlue;
    3: label1.Font.Color := clTeal;
    4: label1.Font.Color := clLime;
    5: label1.Font.Color := clYellow;
    6: label1.Font.Color := clAqua;
    7: label1.Font.Color := clWhite;
    8: label1.Font.Color := clGreen;
  end;
end;

end.
15466601 8774 2004/10/17 10:06:19
好象有个函数可以直接识别表达式的..我很菜的..只能说好象
senfore 8712 2004/9/25 21:26:28
兄弟,有没有可能使用表达式来完成呀。
yandong_bing 8690 2004/9/25 12:04:38
谢谢。
第一页 上一页 下一页 最后页 有 10 条纪录 共1页 1 - 10
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表