最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

delphi实现计算器源码-完整版

来源:动视网 责编:小OO 时间:2025-09-29 04:59:36
文档

delphi实现计算器源码-完整版

private{Privatedeclarations}protected//procedureCreateParams(varParams:TCreateParams);override;public{Publicdeclarations}end;TRightEdit=class(TEdit)protectedprocedureCreateParams(varParams:TCreateParams);override;end;typeoperator=(Emp,add,sub,mul,di
推荐度:
导读private{Privatedeclarations}protected//procedureCreateParams(varParams:TCreateParams);override;public{Publicdeclarations}end;TRightEdit=class(TEdit)protectedprocedureCreateParams(varParams:TCreateParams);override;end;typeoperator=(Emp,add,sub,mul,di
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.

文档

delphi实现计算器源码-完整版

private{Privatedeclarations}protected//procedureCreateParams(varParams:TCreateParams);override;public{Publicdeclarations}end;TRightEdit=class(TEdit)protectedprocedureCreateParams(varParams:TCreateParams);override;end;typeoperator=(Emp,add,sub,mul,di
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top