📄 jsq.~pas
字号:
unit jsq;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, StdCtrls, Buttons;
type
Tf_jsq = class(TForm)
MainMenu1: TMainMenu;
E1: TMenuItem;
H1: TMenuItem;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton15: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton20: TSpeedButton;
Back: TSpeedButton;
Clear: TSpeedButton;
N1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure ClearClick(Sender: TObject);
procedure BackClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton11Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton16Click(Sender: TObject);
procedure SpeedButton20Click(Sender: TObject);
procedure SpeedButton15Click(Sender: TObject);
procedure SpeedButton14Click(Sender: TObject);
procedure SpeedButton13Click(Sender: TObject);
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
f_jsq: Tf_jsq;
RightEdit1: TRightEdit;
operate: Operator = emp;
Operate1: Operator = emp;//记录上一次用户按下的运算符
Pointed: Boolean = False;//是否输入小数点
temp: String = '';
tempnum: Real = 0.0;
implementation
{$R *.dfm}
{ Tf_jsq }
{ TRightEdit }
procedure TRightEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := params.Style - ES_Right;
end;
procedure Tf_jsq.FormCreate(Sender: TObject);
begin
RightEdit1 := TRightEdit.Create(nil);
with RightEdit1 do
begin
Parent := Panel1;
Text := '0.';
Align := alTop;
Enabled := False;
ReadOnly := True;
Show;
end;
end;
procedure Tf_jsq.ClearClick(Sender: TObject);
begin
Pointed := False;
RightEdit1.Text := '0.';
TempNum := 0.0;
Operate := emp;
temp := '';
end;
procedure Tf_jsq.BackClick(Sender: TObject);
var
Strwidth: Integer;
temp: String;
begin
if Operate = emp then
begin
if Trim(RightEdit1.Text)<>'0.' then
begin
if Length(Trim(RightEdit1.Text))>2 then
begin
Temp := Trim(RightEdit1.Text);
Strwidth := Length(Trim(RightEdit1.Text));
if (StrToFloat(RightEdit1.Text)<9)and(strwidth = 3) then //为负数 例如 "-1."
begin
RightEdit1.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;
RightEdit1.Text := temp;
end;
end
else
begin
Pointed := False;
RightEdit1.Text := '0.';
end;
end;
end
else
Beep;
end;
procedure Tf_jsq.SpeedButton1Click(Sender: TObject);
var
strwidth: Integer;
begin
if (temp = '')or(Operate<>emp) then
TempNum := StrToFloat(RightEdit1.Text);
if Operate <>emp then
RightEdit1.Text := '0.';
Temp:= Trim(RightEdit1.Text);
Strwidth := Length(temp);
if Sender is TSpeedButton then
begin
if Operate <> emp then
begin
RightEdit1.Text := '0.';
Operate := emp;
end;
if Pointed = False then
begin
if StrToFloat(RightEdit1.Text)=0 then
RightEdit1.Text := FloatToStr(StrToFloat(RightEdit1.Text)+StrToInt(TSpeedButton(Sender).Caption))+'.'
else
begin
Insert(Trim(TSpeedButton(Sender).Caption),temp,StrWidth);
RightEdit1.Text := temp;
end;
end
else
begin
Insert(Trim(TSpeedButton(Sender).Caption),temp,StrWidth+1);
RightEdit1.Text := temp;
end;
end;
end;
procedure Tf_jsq.SpeedButton11Click(Sender: TObject);
begin
if Operate <> emp then
begin
Tempnum := StrToFloat(RightEdit1.Text);
RightEdit1.Text := '0.';
Operate := emp;
end;
if StrToFloat(RightEdit1.Text)>0 then
begin
RightEdit1.Text := FloatToStr(-StrToFloat(RightEdit1.Text)) ;
if Pos('.',Trim(RightEdit1.Text))=0 then
RightEdit1.Text := FloatToStr(StrToFloat(RightEdit1.Text))+'.';
end
else if StrToFloat(RightEdit1.Text)<0 then
begin
RightEdit1.Text := FloatToStr(abs(StrToFloat(RightEdit1.Text)));
if Pos('.',Trim(RightEdit1.Text))=0 then
RightEdit1.Text := FloatToStr(StrToFloat(RightEdit1.Text))+'.';
end;
end;
procedure Tf_jsq.SpeedButton12Click(Sender: TObject);
begin
if Operate <>emp then
begin
Operate := emp;
RightEdit1.Text := '0.';
end;
if Pointed = True then
Beep
else
Pointed := True;
end;
procedure Tf_jsq.SpeedButton16Click(Sender: TObject);
begin
SpeedButton20.OnClick(Sender);
Operate := add;
Operate1 := add;
end;
procedure Tf_jsq.SpeedButton20Click(Sender: TObject);
begin
if (Operate = emp)and(Trim(temp)<>'') then
begin
case Operate1 of
add: begin
RightEdit1.Text:= FloatToStr(StrToFloat(RightEdit1.Text)+TempNum);
end;
sub: begin
RightEdit1.Text:= FloatToStr(TempNum-StrToFloat(RightEdit1.Text));
end;
mul: begin
RightEdit1.Text:= FloatToStr(TempNum*StrToFloat(RightEdit1.Text));
end;
divid: begin
if StrToFloat(RightEdit1.Text)<>0 then
RightEdit1.Text:= FloatToStr(TempNum/StrToFloat(RightEdit1.Text))
else
Application.MessageBox('除数不能为零.','提示',64);
end;
end;
end;
Operate1 := emp;
Pointed := False;
if Pos('.',Trim(RightEdit1.Text))=0 then
RightEdit1.Text:= Trim(RightEdit1.Text)+'.';
end;
procedure Tf_jsq.SpeedButton15Click(Sender: TObject);
begin
SpeedButton20.OnClick(Sender);
Operate1 := sub;
Operate := sub;
end;
procedure Tf_jsq.SpeedButton14Click(Sender: TObject);
begin
SpeedButton20.OnClick(Sender);
Operate1 := mul;
Operate := mul;
end;
procedure Tf_jsq.SpeedButton13Click(Sender: TObject);
begin
SpeedButton20.OnClick(Sender);
Operate1 := divid;
Operate := divid;
end;
procedure Tf_jsq.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style - WS_EX_TOOLWINDOW;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -