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

---
 demo/Keyboard/uMain.pas |  177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 177 insertions(+), 0 deletions(-)

diff --git a/demo/Keyboard/uMain.pas b/demo/Keyboard/uMain.pas
new file mode 100644
index 0000000..bfdc4a3
--- /dev/null
+++ b/demo/Keyboard/uMain.pas
@@ -0,0 +1,177 @@
+unit uMain;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, StdCtrls, XpMan, Buttons, sBitBtn;
+
+type
+  TfrmMain = class(TForm)
+    edtSelect: TEdit;
+    edtText: TEdit;
+    sBitBtn50: TsBitBtn;
+    sBitBtn51: TsBitBtn;
+    sBitBtn52: TsBitBtn;
+    sBitBtn53: TsBitBtn;
+    Button27: TButton;
+    Button28: TButton;
+    Button29: TButton;
+    Button30: TButton;
+    Button31: TButton;
+    Button32: TButton;
+    Button33: TButton;
+    Button34: TButton;
+    Button35: TButton;
+    Button36: TButton;
+    Button1: TButton;
+    Button2: TButton;
+    Button3: TButton;
+    Button4: TButton;
+    Button5: TButton;
+    Button6: TButton;
+    Button7: TButton;
+    Button8: TButton;
+    Button9: TButton;
+    Button10: TButton;
+    Button11: TButton;
+    Button12: TButton;
+    Button13: TButton;
+    Button14: TButton;
+    Button15: TButton;
+    Button16: TButton;
+    Button17: TButton;
+    Button18: TButton;
+    Button19: TButton;
+    Button20: TButton;
+    Button21: TButton;
+    Button22: TButton;
+    Button23: TButton;
+    Button24: TButton;
+    Button25: TButton;
+    Button26: TButton;
+    btnZh: TButton;
+    Button37: TButton;
+    procedure sBitBtn50Click(Sender: TObject);
+    procedure sBitBtn51Click(Sender: TObject);
+    procedure sBitBtn52Click(Sender: TObject);
+    procedure sBitBtn53Click(Sender: TObject);
+    procedure btnZhClick(Sender: TObject);
+    procedure Button1Click(Sender: TObject);
+  private
+    { Private declarations }
+  public
+    { Public declarations }
+    glInkOutput : String;
+    procedure InsertStringAtCursor(EditControl: TEdit; Str: string);
+    procedure DeleteCharsBeforeCursor(EditControl: TEdit; Count: Integer=1);
+  end;
+
+var
+  frmMain: TfrmMain;
+
+implementation
+
+{$R *.dfm}
+
+//------------------------------------------------------------------------------
+// 模拟按下和释放按键
+procedure SimulateKeyPress(KeyCode: Word);
+begin
+  keybd_event(KeyCode, MapVirtualKey(KeyCode, 0), 0, 0);
+  keybd_event(KeyCode, MapVirtualKey(KeyCode, 0), KEYEVENTF_KEYUP, 0);
+end;
+
+// 模拟按下和释放组合键
+procedure SimulateCombinationKeyPress(KeyCode1, KeyCode2: Word);
+begin
+  keybd_event(KeyCode1, MapVirtualKey(KeyCode1, 0), 0, 0);
+  keybd_event(KeyCode2, MapVirtualKey(KeyCode2, 0), 0, 0);
+  keybd_event(KeyCode2, MapVirtualKey(KeyCode2, 0), KEYEVENTF_KEYUP, 0);
+  keybd_event(KeyCode1, MapVirtualKey(KeyCode1, 0), KEYEVENTF_KEYUP, 0);
+end;
+
+//------------------------------------------------------------------------------
+//从光标处插入字符
+procedure TfrmMain.InsertStringAtCursor(EditControl: TEdit; Str: string);
+begin
+  // 保存当前光标位置
+  EditControl.SelStart := EditControl.SelStart;
+  EditControl.SelLength := 0; // 不选择任何文本,确保只插入而不替换
+  EditControl.SelText := Str; // 插入字符串
+end;
+
+//自定义函数:从光标处删除字符
+procedure TfrmMain.DeleteCharsBeforeCursor(EditControl: TEdit; 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;
+
+//------------------------------------------------------------------------------
+//清除所有输入
+procedure TfrmMain.sBitBtn50Click(Sender: TObject);
+begin
+  edtSelect.Clear;
+end;
+
+//确认字符
+procedure TfrmMain.sBitBtn51Click(Sender: TObject);
+begin
+  //把待选取文字拷贝到edtText中
+  InsertStringAtCursor(edtText, Trim(edtSelect.Text));
+end;
+
+//删除字符
+procedure TfrmMain.sBitBtn52Click(Sender: TObject);
+begin
+  DeleteCharsBeforeCursor(edtText);
+end;
+
+//拷贝输入内容,退出
+procedure TfrmMain.sBitBtn53Click(Sender: TObject);
+begin
+  //将结果更新到全局变量
+  glInkOutput := edtText.Text;
+  Close();
+end;
+
+// 切换到中文输入法
+procedure TfrmMain.btnZhClick(Sender: TObject);
+begin
+  // 假设使用 Ctrl + 空格切换输入法
+  SimulateCombinationKeyPress(VK_CONTROL, VK_SPACE);
+end;
+
+//------------------------------------------------------------------------------
+// 字符按钮处理程序
+procedure TfrmMain.Button1Click(Sender: TObject);
+var
+  KeyChar: Char;
+  KeyCode: Word;
+begin
+  //屏幕键盘输入字母
+  if TButton(Sender).Tag<=37 then begin
+    KeyChar := TButton(Sender).Caption[1]; // 提取按钮 Caption 字符
+    KeyCode := VkKeyScan(KeyChar);
+    SimulateKeyPress(KeyCode);
+  end;
+  edtSelect.SetFocus;
+end;
+
+end.

--
Gitblit v1.9.3