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.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值