📄 chinacalculator.pas
字号:
unit ChinaCalculator;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Grids, ExtCtrls, Buttons, Db,
DBTables, DBCtrls;
type
TfmCalculator = class(TForm)
Panel1: TPanel;
OkButton: TBitBtn;
CancelButton: TBitBtn;
Edit1: TEdit;
Panel2: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Button16: TButton;
Button17: TButton;
Button18: TButton;
procedure FormActivate(Sender: TObject);
procedure Calculator(as_Flag:integer;as_PreA:string);
procedure Button10Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure Button18Click(Sender: TObject);
public
end;
function MyCalculator(Edit: TDBEdit): Boolean;
implementation
VAR
dData:Double=0;
Opr:string='';
PreA:string='=';
{$R *.DFM}
function MyCalculator(Edit: TDBEdit): Boolean;
var
RectBox: TRect;
UpperPoint, LowerPoint: TPoint;
fmCalculator: TfmCalculator;
begin
if not (Edit.DataSource.DataSet.State in [dsEdit, dsInsert]) then
Abort;
Screen.Cursor:= crHourGlass;
fmCalculator:= TfmCalculator.Create(Application);
with fmCalculator do
begin
Screen.Cursor:= crDefault;
with Edit do
begin
RectBox := ClientRect;
UpperPoint.X := rectBox.Left;
UpperPoint.Y := rectBox.Top;
UpperPoint := ClientToScreen( UpperPoint );
LowerPoint.X := rectBox.Right;
LowerPoint.Y := rectBox.Bottom;
LowerPoint := ClientToScreen( LowerPoint );
if UpperPoint.X + 1 + fmCalculator.Width > Screen.Width then
fmCalculator.Left := Screen.Width - fmCalculator.Width - 1
else
fmCalculator.Left := UpperPoint.X + 1;
if LowerPoint.Y + 1 + fmCalculator.Height > Screen.Height then
fmCalculator.Top := UpperPoint.Y - fmCalculator.Height
else
fmCalculator.Top := LowerPoint.Y + 1;
end;
Result:= ShowModal = mrOK;
if Result then
Edit.DataSource.DataSet.FieldByName(Edit.DataField).AsFloat :=
StrToFloat(edit1.text);
Free;
end
end;
procedure TfmCalculator.Calculator(as_Flag:integer;as_PreA:string);
begin
if as_flag=0 then
begin
if PreA='=' then
begin
dData:=0;
Edit1.text:=as_PreA;
end;
if (PreA='+') or (PreA='-') or (PreA='*') or (PreA='/') then
begin
dData:=strtofloat(Edit1.text);
Edit1.text:=as_PreA;
end;
if PreA='N' then
begin
if as_PreA='.' then
begin
if pos('.',Edit1.text)>0 then exit;
end;
if as_PreA='+/-' then
begin
if copy(Edit1.text,1,1)='-' then
Edit1.text:=copy(Edit1.text,2,length(Edit1.text))
else
Edit1.text:='-'+Edit1.text;
end;
if Edit1.text='0' then
Edit1.text:=as_PreA
else
Edit1.text:=Edit1.text+as_PreA;
end;
PreA:='N';
end
else
begin
if as_PreA='=' then
begin
if Opr='' then exit;
if Opr='*' then dData:=dData * strtofloat(Edit1.text);
if Opr='/' then dData:=dData / strtofloat(Edit1.text);
if Opr='+' then dData:=dData + strtofloat(Edit1.text);
if Opr='-' then dData:=dData - strtofloat(Edit1.text);
Edit1.text:=floattostr(dData);
Opr:='';
PreA:='=';
end
else
begin
if Opr='' then
begin
dData:=strtofloat(Edit1.text);
Opr:=as_PreA;
PreA:=as_PreA;
end
else
begin
if Opr='*' then dData:=dData * strtofloat(Edit1.text);
if Opr='/' then dData:=dData / strtofloat(Edit1.text);
if Opr='+' then dData:=dData + strtofloat(Edit1.text);
if Opr='-' then dData:=dData - strtofloat(Edit1.text);
Edit1.text:=floattostr(dData);
Opr:=as_PreA;
PreA:=as_PreA;
end;
end;
end;
end;
procedure TfmCalculator.FormActivate(Sender: TObject);
begin
OkButton.Caption :='';
CancelButton.Caption :='';
end;
procedure TfmCalculator.Button10Click(Sender: TObject);
begin
Calculator(0,'0');
end;
procedure TfmCalculator.Button1Click(Sender: TObject);
begin
Calculator(0,'1');
end;
procedure TfmCalculator.Button2Click(Sender: TObject);
begin
Calculator(0,'2');
end;
procedure TfmCalculator.Button3Click(Sender: TObject);
begin
Calculator(0,'3');
end;
procedure TfmCalculator.Button4Click(Sender: TObject);
begin
Calculator(0,'4');
end;
procedure TfmCalculator.Button5Click(Sender: TObject);
begin
Calculator(0,'5');
end;
procedure TfmCalculator.Button6Click(Sender: TObject);
begin
Calculator(0,'6');
end;
procedure TfmCalculator.Button7Click(Sender: TObject);
begin
Calculator(0,'7');
end;
procedure TfmCalculator.Button8Click(Sender: TObject);
begin
Calculator(0,'8');
end;
procedure TfmCalculator.Button9Click(Sender: TObject);
begin
Calculator(0,'9');
end;
procedure TfmCalculator.Button16Click(Sender: TObject);
begin
Calculator(1,'/');
end;
procedure TfmCalculator.Button15Click(Sender: TObject);
begin
Calculator(1,'*');
end;
procedure TfmCalculator.Button14Click(Sender: TObject);
begin
Calculator(1,'-');
end;
procedure TfmCalculator.Button13Click(Sender: TObject);
begin
Calculator(1,'+');
end;
procedure TfmCalculator.Button12Click(Sender: TObject);
begin
Calculator(1,'=');
end;
procedure TfmCalculator.Button17Click(Sender: TObject);
begin
Calculator(0,'.');
end;
procedure TfmCalculator.Button18Click(Sender: TObject);
begin
dData:=0;
Opr:='';
PreA:='=';
Edit1.Text :='0';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -