unit uCalc;
|
|
interface
|
|
uses
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
Dialogs, Math, StrUtils, Buttons, sSpeedButton, StdCtrls, sEdit, sBitBtn;
|
|
type
|
TfrmCalc = class(TForm)
|
edtInput: TsEdit;
|
edt1: TsBitBtn;
|
edt2: TsBitBtn;
|
edt3: TsBitBtn;
|
edtAdd: TsBitBtn;
|
edtDel: TsBitBtn;
|
edt4: TsBitBtn;
|
edt5: TsBitBtn;
|
edt6: TsBitBtn;
|
edtDoc: TsBitBtn;
|
edtEsc: TsBitBtn;
|
edt7: TsBitBtn;
|
edt8: TsBitBtn;
|
edt9: TsBitBtn;
|
edt0: TsBitBtn;
|
edtReturn: TsBitBtn;
|
edtClose: TsBitBtn;
|
procedure FormShow(Sender: TObject);
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
procedure edtCloseClick(Sender: TObject);
|
procedure edt1Click(Sender: TObject);
|
procedure edtAddClick(Sender: TObject);
|
procedure edtDocClick(Sender: TObject);
|
procedure edtDelClick(Sender: TObject);
|
procedure edtEscClick(Sender: TObject);
|
procedure edtReturnClick(Sender: TObject);
|
private
|
{ Private declarations }
|
public
|
{ Public declarations }
|
strParam : String;
|
procedure InsertStringAtCursor(EditControl: TsEdit; Str: string);
|
procedure DeleteCharsBeforeCursor(EditControl: TsEdit; Count: Integer=1);
|
end;
|
|
var
|
frmCalc: TfrmCalc;
|
|
implementation
|
|
uses
|
uMain, global;
|
|
{$R *.dfm}
|
|
//------- ×Ô¶¨Ò幦Äܺ¯Êý -------------------------------------------------------
|
//×Ô¶¨Ò庯Êý£ºEditȫѡÅж¨
|
function IsTextFullySelected(Edit: TsEdit): Boolean;
|
begin
|
Result := (Edit.SelStart = 0) and (Edit.SelLength = Length(Edit.Text));
|
end;
|
|
//×Ô¶¨Ò庯Êý£º´Ó¹â±ê´¦²åÈë×Ö·û
|
procedure TfrmCalc.InsertStringAtCursor(EditControl: TsEdit; Str: string);
|
begin
|
// ±£´æµ±Ç°¹â±êλÖÃ
|
EditControl.SelStart := EditControl.SelStart;
|
EditControl.SelLength := 0; // ²»Ñ¡ÔñÈκÎÎı¾£¬È·±£Ö»²åÈë¶ø²»Ìæ»»
|
EditControl.SelText := Str; // ²åÈë×Ö·û´®
|
end;
|
|
//×Ô¶¨Ò庯Êý£º´Ó¹â±ê´¦É¾³ý×Ö·û
|
procedure TfrmCalc.DeleteCharsBeforeCursor(EditControl: TsEdit; Count: Integer=1);
|
var
|
CursorPos, NewStart: Integer;
|
begin
|
if IsTextFullySelected(EditControl) then EditControl.Text := ''
|
else begin
|
CursorPos := EditControl.SelStart;
|
if CursorPos >= Count then
|
begin
|
NewStart := CursorPos - Count; // ¼ÆËãеÄÑ¡ÔñÆðµã
|
EditControl.SelStart := NewStart;
|
EditControl.SelLength := Count; // Ñ¡ÔñCount¸ö×Ö·û
|
EditControl.SelText := ''; // ɾ³ýÑ¡¶¨µÄÎı¾
|
end
|
else
|
begin
|
// Èç¹ûCount´óÓÚ¹â±êλÖã¬Ôòɾ³ýËùÓÐÔÚ¹â±ê֮ǰµÄ×Ö·û
|
EditControl.SelStart := 0;
|
EditControl.SelLength := CursorPos;
|
EditControl.SelText := '';
|
end;
|
end;
|
end;
|
//------- ³õʼ»¯ ---------------------------------------------------------------
|
procedure TfrmCalc.FormShow(Sender: TObject);
|
begin
|
edtInput.Text := strParam;
|
//³õʼ»¯ÃÜÂë
|
frmMain.sLoginPwd := '';
|
end;
|
|
procedure TfrmCalc.FormClose(Sender: TObject; var Action: TCloseAction);
|
begin
|
Action := caFree;
|
frmCalc := nil;
|
end;
|
|
//------- °´Å¥¹¦ÄÜÇø------------------------------------------------------------
|
//Êý×ÖÇø¹¦ÄÜ
|
procedure TfrmCalc.edt1Click(Sender: TObject);
|
begin
|
if IsTextFullySelected(edtInput) then edtInput.Text := '';
|
case TsBitBtn(Sender).Tag of
|
0: InsertStringAtCursor(edtInput,'0');
|
1: InsertStringAtCursor(edtInput,'1');
|
2: InsertStringAtCursor(edtInput,'2');
|
3: InsertStringAtCursor(edtInput,'3');
|
4: InsertStringAtCursor(edtInput,'4');
|
5: InsertStringAtCursor(edtInput,'5');
|
6: InsertStringAtCursor(edtInput,'6');
|
7: InsertStringAtCursor(edtInput,'7');
|
8: InsertStringAtCursor(edtInput,'8');
|
9: InsertStringAtCursor(edtInput,'9');
|
end;
|
end;
|
|
procedure TfrmCalc.edtCloseClick(Sender: TObject);
|
begin
|
Close();
|
end;
|
|
//ÊäÈëÕý¸ººÅ
|
procedure TfrmCalc.edtAddClick(Sender: TObject);
|
{var
|
ss : string;
|
len : Integer;}
|
begin
|
{ss := LeftStr(edtInput.Text,1);
|
len := Length(edtInput.Text);
|
if ss='-' then
|
edtInput.Text := RightStr(edtInput.Text, len-1)
|
else
|
edtInput.Text := '-'+edtInput.Text;}
|
InsertStringAtCursor(edtInput,'-');
|
end;
|
|
//ÊäÈë.ºÅ
|
procedure TfrmCalc.edtDocClick(Sender: TObject);
|
begin
|
//if pos('.',edtInput.Text)=0 then
|
//edtInput.Text := edtInput.Text+'.';
|
InsertStringAtCursor(edtInput,'.');
|
end;
|
|
//ÊäÈëɾ³ý·ûºÅ
|
procedure TfrmCalc.edtDelClick(Sender: TObject);
|
begin
|
DeleteCharsBeforeCursor(edtInput);
|
end;
|
|
//ÊäÈëesc
|
procedure TfrmCalc.edtEscClick(Sender: TObject);
|
begin
|
edtInput.Clear;
|
end;
|
|
//ÊäÈë»Ø³µÈ·ÈÏ
|
procedure TfrmCalc.edtReturnClick(Sender: TObject);
|
//var
|
// len : Integer;
|
begin
|
//½«½á¹û¸üе½È«¾Ö±äÁ¿
|
glCalcOutput := edtInput.Text;
|
//´¦ÀíÒì³£--×Ö·û´®×îºóһλÊÇ.
|
{if RightStr(glCalcOutput,1)='.' then begin
|
len := Length(glCalcOutput);
|
glCalcOutput := LeftStr(glCalcOutput, len-1);
|
end; }
|
//°´½¹µã·µ»Ø×Ö·û´®
|
case glCurrFocus of
|
//------ 0רָ·µ»ØÊÖ¶¯Ä£Ê½¿ÚÁîÖµ -----
|
0: begin
|
frmMain.sLoginPwd := glCalcOutput;
|
end;
|
//------------------------------------
|
1: begin
|
frmMain.edtMois1.Text := glCalcOutput;
|
end;
|
2: begin
|
frmMain.edtMois2.Text := glCalcOutput;
|
end;
|
3: begin
|
frmMain.edtMois3.Text := glCalcOutput;
|
end;
|
4: begin
|
frmMain.edtMois4.Text := glCalcOutput;
|
end;
|
5: begin
|
frmMain.edtMois5.Text := glCalcOutput;
|
end;
|
6: begin
|
frmMain.edtManCoef1.Text := glCalcOutput;
|
end;
|
7: begin
|
frmMain.edtManCoef2.Text := glCalcOutput;
|
end;
|
8: begin
|
frmMain.edtManCoef3.Text := glCalcOutput;
|
end;
|
9: begin
|
frmMain.edtManCoef4.Text := glCalcOutput;
|
end;
|
10: begin
|
frmMain.edtManCoef5.Text := glCalcOutput;
|
end;
|
11: begin
|
frmMain.edtIP.Text := glCalcOutput;
|
end;
|
12: begin
|
frmMain.edtPort.Text := glCalcOutput;
|
end;
|
13: begin
|
frmMain.edtTime1.Text := glCalcOutput;
|
end;
|
14: begin
|
frmMain.edtTime2.Text := glCalcOutput;
|
end;
|
15: begin
|
frmMain.edtWeight1.Text := glCalcOutput;
|
end;
|
16: begin
|
frmMain.edtWeight2.Text := glCalcOutput;
|
end;
|
17: begin
|
frmMain.edtWeight3.Text := glCalcOutput;
|
end;
|
18: begin
|
frmMain.edtWTare.Text := glCalcOutput;
|
end;
|
19: begin
|
frmMain.edtRange.Text := glCalcOutput;
|
end;
|
20: begin
|
frmMain.edtVolume.Text := glCalcOutput;
|
end;
|
21: begin
|
frmMain.edtTare.Text := glCalcOutput;
|
end;
|
22: begin
|
frmMain.edtDelay.Text := glCalcOutput;
|
end;
|
23: begin
|
frmMain.edtPassword.Text := glCalcOutput;
|
end;
|
24: begin
|
frmMain.edtManVal.Text := glCalcOutput;
|
end;
|
25: begin
|
frmMain.edtIntercept.Text := glCalcOutput;
|
end;
|
26: begin
|
frmMain.edtHeartIP.Text := glCalcOutput;
|
end;
|
27: begin
|
frmMain.edtHeartPort.Text := glCalcOutput;
|
end;
|
end;
|
//¹Ø±Õ¼üÅÌ
|
Close();
|
end;
|
|
end.
|