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.