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 |  151 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 151 insertions(+), 0 deletions(-)

diff --git a/src/uTablet.~pas b/src/uTablet.~pas
new file mode 100644
index 0000000..5dfbdb0
--- /dev/null
+++ b/src/uTablet.~pas
@@ -0,0 +1,151 @@
+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.

--
Gitblit v1.9.3