视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
delphi实现计算器源码-完整版
2025-09-29 04:59:36 责编:小OO
文档
private

    { Private declarations }

  protected

   // procedure CreateParams(var Params: TCreateParams);override;

  public

    { Public declarations }

  end;

  TRightEdit = class(TEdit)

  protected

    procedure CreateParams(var Params : TCreateParams);override;

  end;

  type

    operator = (Emp,add,sub,mul,divid);  //空、加、减、乘、除

var

  FrmCounter: TFrmCounter;

  MyRightEdit: TRightEdit;

  operate: Operator = emp;

  operate1: Operator = emp; //记录上一次用户按下的运算符

  Pointed: Boolean = False; //是否输入小数点

  temp: string = '';

  tempnum: Real = 0.0;

implementation

{$R *.dfm}

//重载 TRightEdit的CreateParams自定义编辑框的一些样式

procedure TRightEdit.CreateParams(var Params : TCreateParams);

begin

  inherited;

  Params.Style := params.Style + ES_Right;

end;

//创建窗体时初始化一些参数

procedure TFrmCounter.FormCreate(Sender: TObject);

begin

  MyRightEdit := TrightEdit.Create(nil);

  with MyRightEdit do

  begin

    parent := panel1;

    text := '0.';

    MyRightEdit.Height := 100;

    Align := alTop;

    Enabled := False;

    ReadOnly := True;

    show;

  end;

end;

//清零的响应函数

procedure TFrmCounter.SBClearClick(Sender: TObject);

begin

  Pointed := False;

  MyRightEdit.Text := '0.';

  TempNum := 0.0;

  Operate := emp;

  temp := '';

end;

//数字键输入响应函数

procedure TFrmCounter.SpeedButton1Click(Sender: TObject);

var

  StrWidth: Integer;

begin

if (temp = '')or(Operate <> emp) then

    TempNum := StrToFloat(MyRightEdit.Text);

if Operate <> emp then

    MyRightEdit.Text := '0.';

  Temp := Trim(MyRightEdit.Text);

  StrWidth := Length(temp);

  if Sender is TSpeedButton then

  begin

if Operate <> emp then

    begin

      MyRightEdit.Text := '0.';

      Operate := emp;

    end;

    if Pointed = False then

    begin

      if StrToFloat(MyRightEdit.Text) = 0 then

        MyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text)+

          StrToInt(TSpeedButton(Sender).Caption))+'.'

      else begin

        Insert(Trim(TspeedButton(Sender).Caption),temp,StrWidth);

        MyRightEdit.Text := temp;

      end;

    end

    else begin

      Insert(Trim(TSpeedButton(Sender).Caption),temp,StrWidth+1);

      MyRightEdit.Text := temp;

    end;

  end;

end;

//正负符号响应函数

procedure TFrmCounter.SpeedButton13Click(Sender: TObject);

begin

if Operate <> emp then

  begin

    TempNum := StrToFloat(MyRightEdit.Text);

    MyRightEdit.Text := '0.';

    Operate := emp;

  end;

  if StrToFloat(MyRightEdit.Text) > 0 then

  begin

    MyRightEdit.Text := FloatToStr(-StrToFloat(MyRightEdit.Text));

    if Pos('.',Trim(MyRightEdit.Text))=0 then

      MyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text))+'.';

  end

  else if StrToFloat(MyRightEdit.Text)<0 then

  begin

    MyRightEdit.Text := FloatToStr(abs(StrToFloat(MyRightEdit.Text)));

    if Pos('.',Trim(MyRightEdit.Text))=0 then

      MyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text))+'.';

  end;

end;

//小数点的输入

procedure TFrmCounter.SpeedButton14Click(Sender: TObject);

begin

if Operate <> emp then

  begin

    Operate := emp;

    MyRightEdit.Text := '0';

  end;

  if Pointed = True then

    Beep

  else

    Pointed := True;

end;

//显示运算结果

procedure TFrmCounter.SpeedButton19Click(Sender: TObject);

begin

  if (Operate = emp)and(Trim(temp)<>'') then

  begin

    case Operate1 of

      add: begin

             MyRightEdit.Text := FloatToStr(StrToFloat(MyRightEdit.Text)+TempNum);

           end;

      sub: begin

             MyRightEdit.Text := FloatToStr(TempNum-StrToFloat(MyRightEdit.Text));

           end;

      mul: begin

             MyRightEdit.Text := FloatToStr(TempNum*StrToFloat(MyRightEdit.Text));

           end;

      divid: begin

             if StrToFloat(MyRightEdit.Text)<>0 then

               MyRightEdit.Text := FloatToStr(TempNum/StrToFloat(MyRightEdit.Text))

             else

               Application.MessageBox('除数不能为零。','提示',);

             end;

      end;

  end;

  Operate1 := emp;

  Pointed := False;

  if Pos('.',Trim(MyRightEdit.Text))=0 then

    MyRightEdit.Text := Trim(MyRightEdit.Text)+'.';

end;

procedure TFrmCounter.SpeedButton12Click(Sender: TObject);

begin

  SpeedButton19.OnClick(Sender);

  Operate := add;

  Operate1 := add;

end;

procedure TFrmCounter.SpeedButton17Click(Sender: TObject);

begin

  SpeedButton19.OnClick(Sender);

  Operate := sub;

  Operate1 := sub;

end;

procedure TFrmCounter.SpeedButton6Click(Sender: TObject);

begin

  SpeedButton19.OnClick(Sender);

  Operate := mul;

  Operate1 := mul;

end;

procedure TFrmCounter.SpeedButton10Click(Sender: TObject);

begin

  SpeedButton19.OnClick(Sender);

  Operate := divid;

  Operate1 := divid;

end;

procedure TFrmCounter.SBBackspaceClick(Sender: TObject);

var

  StrWidth: Integer;

  temp: string;

begin

  if Operate = emp then

  begin

    if Trim(MyRightEdit.Text)<>'0.' then

    begin

      if Length(Trim(MyRightEdit.Text))>2 then

      begin

        Temp := Trim(MyRightEdit.Text);

        StrWidth := Length(Trim(MyRightEdit.Text));

        if (StrToFloat(MyRightEdit.Text)<9)and(StrWidth = 3) then

        begin

          MyRightEdit.Text := '0.';

          Pointed := False;

        end

        else begin

          if Pointed = False then

            Delete(Temp,StrWidth-1,1)

          else begin

            if Copy(temp,StrWidth,1)='.' then

              Pointed := False

            else

              Delete(Temp,StrWidth,1);

          end;

          if Trim(temp) = '.' then

            Pointed := False;

          MyRightEdit.Text := temp;

        end;

      end

      else begin

        Pointed := False;

        MyRightEdit.Text := '0.';

      end;

    end;

  end

  else

    Beep;

end;

end.下载本文

显示全文
专题