delphi实现计算器源码-完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;