Delphi之小应用--计算器

这篇博客介绍了如何利用Delphi编程语言手动创建和释放控件,以及绑定控件事件,来构建一个简单的计算器应用。文章提供了具体的代码示例,重点展示了在Windows环境下使用Integer类型和Forms组件进行计算操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要应用了:

   1. 手动创建控件及释放;

   2. 绑定控件事件;

代码如下:

unit uFormMain;

interface

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

const CalcCount = 5;
type
  TFormMain = class(TForm)
    edtExpression: TEdit;
    pnlNum: TPanel;
    btnClose: TButton;
    pnlCalc: TPanel;
    btnClear: TButton;
    stat1: TStatusBar;
    btnBackspace: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnNumClick(Sender: TObject);
    procedure btnCalcClick(Sender: TObject);
    procedure btnClearClick(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
    procedure edtExpressionKeyPress(Sender: TObject; var Key: Char);
    procedure btnBackspaceClick(Sender: TObject);
  private
    { Private declarations }
  public
    btnNum: array[0..9] of TButton;
    btnCalc: array[0..CalcCount - 1] of TButton;
    { Public declarations }
  end;

const
  CalcOpts: array[0..CalcCount - 1] of Char = ('+', '-', '*', '/', '=');
var
  FormMain: TFormMain;
  Result: Integer = 0;
  Opt: Char;  // perior operator 
implementation

{$R *.dfm}

procedure TFormMain.btnCalcClick(Sender: TObject);
var
  c: Char;
begin
  if edtExpression.Text ='' then Exit;
  //edtExpression.Text := edtExpression.Text + (Sender as TButton).Caption;
  c := (Sender as Tbutton).Caption[1];
  if Opt <> '' then
  begin
    case Opt of
      '+':
        begin
          Result := Result + StrToInt(edtExpression.Text);
        end;
      '-':
        begin
          Result := Result - StrToInt(edtExpression.Text);
        end;
      '*':
        begin
          Result := Result * StrToInt(edtExpression.Text);
        end;
      '/':
        begin
          if StrToInt(edtExpression.Text) = 0 then Exit;
          Result := Result div StrToInt(edtExpression.Text);
        end;
      '=':
        begin

        end;
    end;
  end
  else
    Result := StrToInt(edtExpression.Text);
  if (c <> '=') then
  begin
    edtExpression.Text := '0';
  end
  else
    edtExpression.Text := IntToStr(Result);
  Opt := c;
  stat1.SimpleText := IntToStr(Result);

end;

procedure TFormMain.btnNumClick(Sender: TObject);
begin
   edtExpression.Text := IntToStr(StrToInt(edtExpression.Text) * 10
     + StrToInt((Sender as TButton).Caption));
end;

procedure TFormMain.FormCreate(Sender: TObject);
var
  i: Integer;
begin
   { TODO : 初始化数字键 }
  for i := Low(btnNum) to High(btnNum) do
  begin
    btnNum[i] := TButton.Create(Self);
    with btnNum[i] do
    begin
      Parent := pnlNum;
      Left := 20 + (i mod 3) * 50;
      Top := 10 + ( i div 3) * 40;
      Width := 30;
      Height := 30;
      Caption := IntToStr((i+1) mod 10);
      OnClick :=  btnNumClick;
    end;
  end;

  // 初始化运算符键
    for i := 0 to CalcCount - 1 do
  begin
    btnCalc[i] := TButton.Create(Self);
    with btnCalc[i] do
    begin
      Parent := pnlCalc;
      Left := 10;
      Top := 5 + i * 35;
      Width := 30;
      Height := 30;
      Caption :=  CalcOpts[i];
      Font.Size := 12;
      Font.Style := Font.Style + [fsBold];
      
      OnClick :=  btnCalcClick;
    end;
  end;
  stat1.SimplePanel := True;
  edtExpression.Text := '0';
end;

procedure TFormMain.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for i := Low(btnNum) to High(btnNum) do
  begin
    if Assigned(btnNum[i]) then
      FreeAndNil(btnNum);
  end;

  for i := Low(btnCalc) to High(btnCalc) do
  begin
    if Assigned(btnCalc[i]) then
      FreeAndNil(btnCalc);
  end;
end;

procedure TFormMain.btnClearClick(Sender: TObject);
begin
  edtExpression.Text := '0';
  Result := 0;
  stat1.SimpleText := IntToStr(Result);
end;

procedure TFormMain.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TFormMain.edtExpressionKeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0' .. '9']) then Key := #0;
end;

procedure TFormMain.btnBackspaceClick(Sender: TObject);
begin
  edtExpression.Text := IntToStr(StrToInt(edtExpression.Text) div 10);
end;

end.


 

delphi做的计算器。unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Scr: TLabel; 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; procedure Button1Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button20Click(Sender: TObject); procedure Button19Click(Sender: TObject); procedure Button18Click(Sender: TObject); private { Private declarations } pnt,er,fb:boolean; fstnm:Extended; fbcaption:string; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var temp:string; begin if er then exit; if pnt then scr.Caption:=scr.Caption+(sender as Tbutton).Caption else if (scr.Caption='0.') or fb then begin scr.Caption:=(sender as Tbutton).caption+'.'; fb:=false; end else begin temp:=scr.Caption; insert((sender as Tbutton).Caption,temp,length(temp)); scr.Caption:=temp; end; end; procedure TForm1.Button12Click(Sender: TObject); var temp:string; begin if er then exit; if scr.Caption<>'0.' then if pos('-',scr.Caption)>0 then begin temp:=scr.Caption; delete(temp,1,1); scr.Caption:=temp; end else scr.Caption:='-'+scr.Caption; end; procedure TForm1.FormCreate(Sender: TObject); begin pnt:=false; fstnm:=0; fb:=false; fbcaption:=''; er:=false; end; procedure TForm1.Button11Click(Sender: TObject); begin if er then exit; pnt:=true; end; procedure TForm1.Button13Click(Sender: TObject); begin if er then exit; if not fb then button20click(nil); if er then exit; fstnm:=strtofloat(scr.Caption); fbcaption:=(sender as Tbutton).Caption; fb:=true; pnt:=false; end; procedure TForm1.Button20Click(Sender: TObject); begin if er then exit; if fbcaption='+' then begin scr.Caption:=floattostr(strtofloat(scr.Caption)+fstnm); end; if fbcaption='-' then begin scr.Caption:=floattostr(fstnm-strtofloat(scr.Caption)); end; if fbcaption='*' then begin scr.Caption:=floattostr(strtofloat(scr.Caption)*fstnm); end; if fbcaption='/' then begin if scr.Caption<>'0.' then scr.Caption:=floattostr(fstnm/strtofloat(scr.Caption)) else begin scr.Caption:='zero divid error!'; er:=true; end; end; if pos('.',scr.caption)=0 then scr.Caption:=scr.Caption+'.'; fb:=true; pnt:=false; fbcaption:=''; end; procedure TForm1.Button19Click(Sender: TObject); begin pnt:=false; fstnm:=0; fb:=false; fbcaption:=''; er:=false; scr.Caption:='0.'; end; procedure TForm1.Button18Click(Sender: TObject); begin if er then exit; scr.Caption:='0.'; end; end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值