unit uTablet; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MSINKAUTLib_TLB, OleServer, StdCtrls, Buttons, sBitBtn, ExtCtrls, sEdit; type TfrmTablet = class(TForm) InkPanel: TPanel; edtSelect: TEdit; sBitBtn50: TsBitBtn; sBitBtn51: TsBitBtn; sBitBtn52: TsBitBtn; InkCLT: TInkCollector; InkRC: TInkRecognizerContext; sBitBtn53: TsBitBtn; edtText: TsEdit; procedure sBitBtn50Click(Sender: TObject); procedure sBitBtn51Click(Sender: TObject); procedure sBitBtn52Click(Sender: TObject); procedure sBitBtn53Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; const Stroke: IInkStrokeDisp; var Cancel: WordBool); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } strParam : String; //ÊÖд×é¼þ×Ô¶¨Òå¿â procedure InitTabletPC(pl:TPanel); procedure InsertStringAtCursor(EditControl: TsEdit; Str: string); procedure DeleteCharsBeforeCursor(EditControl: TsEdit; Count: Integer=1); end; var frmTablet: TfrmTablet; implementation uses uMain, Global, uCalc; {$R *.dfm} //------------------------------------------------------------------------------ // TabletPCÊÖд¹¦ÄÜʼþ // ʹÓÃTabletPC×é¼þ¿ª·¢µÄÆÁÄ»ÊÖдÊäÈ빦ÄÜ //------------------------------------------------------------------------------ procedure TfrmTablet.InitTabletPC(pl:TPanel); begin InkCLT.hWnd := pl.Handle; InkCLT.Enabled := true; InkCLT.DefaultDrawingAttributes.Color := clRed; // īˮÑÕÉ« InkCLT.DefaultDrawingAttributes.Width := 200; // ±ÊµÄ¿í¶È end; //´Ó¹â±ê´¦²åÈë×Ö·û procedure TfrmTablet.InsertStringAtCursor(EditControl: TsEdit; Str: string); begin // ±£´æµ±Ç°¹â±êλÖà EditControl.SelStart := EditControl.SelStart; EditControl.SelLength := 0; // ²»Ñ¡ÔñÈκÎÎı¾£¬È·±£Ö»²åÈë¶ø²»Ìæ»» EditControl.SelText := Str; // ²åÈë×Ö·û´® end; //×Ô¶¨Ò庯Êý£º´Ó¹â±ê´¦É¾³ý×Ö·û procedure TfrmTablet.DeleteCharsBeforeCursor(EditControl: TsEdit; Count: Integer=1); var CursorPos, NewStart: Integer; 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; //------- ³õʼ»¯Ä£Ì¬¶Ô»°¿ò -------------------------- //³õʼ»¯Ink×é¼þ procedure TfrmTablet.FormCreate(Sender: TObject); begin //³õʼ»¯ÊÖдÊäÈë×é¼þ InitTabletPC(InkPanel); end; procedure TfrmTablet.FormShow(Sender: TObject); begin edtText.Text := strParam; end; procedure TfrmTablet.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; frmTablet := nil; end; //------- ÊÖд×é¼þ´¥·¢Ê¼þ -------------------------- procedure TfrmTablet.InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; const Stroke: IInkStrokeDisp; var Cancel: WordBool); begin //ÔÚ´øÑ¡È¡Ê¶±ðÎÄ×Ö edtSelect.Text := Stroke.Ink.Strokes.ToString; end; //------- °´Å¥¹¦ÄÜ ---------------------------------- //Çå¿ÕÊÖÐ´Çø procedure TfrmTablet.sBitBtn50Click(Sender: TObject); begin InkCLT.Ink.DeleteStrokes(InkCLT.Ink.Strokes); edtSelect.Clear; InkPanel.Refresh; end; //È·ÈÏÊäÈëÎÄ×Ö procedure TfrmTablet.sBitBtn51Click(Sender: TObject); begin //°Ñ´ýѡȡÎÄ×Ö¿½±´µ½Ò©²ÄÃû³ÆEdit InsertStringAtCursor(edtText, Trim(edtSelect.Text)); //sBitBtn50Click(Sender); end; //ɾ³ý procedure TfrmTablet.sBitBtn52Click(Sender: TObject); begin DeleteCharsBeforeCursor(edtText); end; //Í˳ö procedure TfrmTablet.sBitBtn53Click(Sender: TObject); begin //ÇåÀíÊÖдÊý¾Ý InkCLT.Ink.DeleteStrokes(InkCLT.Ink.Strokes); InkPanel.Refresh; //½«½á¹û¸üе½È«¾Ö±äÁ¿ glInkOutput := edtText.Text; Close(); end; end.