unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleServer, MSINKAUTLib_TLB, ExtCtrls, StdCtrls; type TForm1 = class(TForm) InkCLT: TInkCollector; InkRC: TInkRecognizerContext; Panel1: TPanel; Button1: TButton; edtName: TEdit; Button2: TButton; Button3: TButton; Button4: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; const Stroke: IInkStrokeDisp; var Cancel: WordBool); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } procedure InitializeInkCollector; function DeleteStr(str :WideString):WideString; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //------- ×Ô¶¨Ò庯Êý ------------------------------ //³õʼ»¯InkCLT procedure TForm1.InitializeInkCollector; begin InkCLT.hWnd := panel1.Handle; InkCLT.Enabled := true; InkCLT.DefaultDrawingAttributes.Color := clRed; // īˮÑÕÉ« InkCLT.DefaultDrawingAttributes.Width := 200; // ±ÊµÄ¿í¶È end; function TForm1.DeleteStr(str :WideString):WideString; var LengthOfText: Integer; begin LengthOfText := Length(str); if LengthOfText > 0 then begin // ɾ³ý×îºóÒ»¸ö×Ö·û Delete(str, LengthOfText, 1); end; Result := str; end; //------------------------------------------------- procedure TForm1.FormCreate(Sender: TObject); begin InitializeInkCollector; end; procedure TForm1.InkCLTStroke(ASender: TObject; const Cursor: IInkCursor; const Stroke: IInkStrokeDisp; var Cancel: WordBool); //var // ActiveCtrl: TWinControl; begin //·µ»Øµ±Ç°ÓµÓн¹µãµÄ¿Ø¼þ //ActiveCtrl := Screen.ActiveControl; //if ActiveCtrl is TEdit then // TEdit(ActiveCtrl).Text := TEdit(ActiveCtrl).Text + Stroke.Ink.Strokes.ToString //else if ActiveCtrl is TMemo then // TMemo(ActiveCtrl).Lines.Add(Stroke.Ink.Strokes.ToString); Edit1.Text := Stroke.Ink.Strokes.ToString; //else // ShowMessage('Ìáʾ£ºµ±Ç°½¹µã²»Ôڱ༭¿ò»ò¶àÐб༭¿òÉÏ.'); end; //Çå¿ÕÊÖÐ´Çø procedure TForm1.Button1Click(Sender: TObject); begin InkCLT.Ink.DeleteStrokes(InkCLT.Ink.Strokes); Edit1.Clear; Panel1.Refresh; end; //ɾ³ýÒ»¸ö×Ö£¬ÒªÍ³¼ÆÃ¿¸ö×ÖÓжàÉÙ±Ú»­£¬InkÖ»ÄÜ×·×ٱʻ­£¬°´±Ê»­À´É¾³ý£¡£¡£¡ procedure TForm1.Button2Click(Sender: TObject); var Strokes: IInkStrokes; LastStroke: IInkStrokeDisp; begin //Edit1.Text := DeleteStr(Edit1.Text); if InkCLT.Ink.Strokes.Count > 0 then begin Strokes := InkCLT.Ink.Strokes; LastStroke := Strokes.Item(Strokes.Count - 1) as IInkStrokeDisp; InkCLT.Ink.DeleteStroke(LastStroke); end; end; //È·Èϱ¸Ñ¡×Ö procedure TForm1.Button3Click(Sender: TObject); begin edtName.Text := edtName.Text + Trim(Edit1.Text); Button1Click(Sender); end; //ɾ³ýEdit1µÄÒ»¸ö×Ö procedure TForm1.Button4Click(Sender: TObject); begin edtName.Text := DeleteStr(edtName.Text); end; end.