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);
|
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);
|
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.
|