From 868daf94f29ce1ffdd799a68c07bb668cd373bcd Mon Sep 17 00:00:00 2001 From: HP\李良庭 <liliangting@lanpucloud.cn:1111> Date: 星期二, 08 七月 2025 11:49:03 +0800 Subject: [PATCH] 提交分辨率自适应版本V3.1.0.1500 --- src/uTablet.pas | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 156 insertions(+), 0 deletions(-) diff --git a/src/uTablet.pas b/src/uTablet.pas new file mode 100644 index 0000000..aa09a6a --- /dev/null +++ b/src/uTablet.pas @@ -0,0 +1,156 @@ +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. -- Gitblit v1.9.3