⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chinacalculator.pas

📁 电子充值系统:全球通的充值卡通过POS机传到销售点.
💻 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 + -