DispatchInputEvent
表单、交互、输入
描述
通过当前 TPDFlibFormSession 分派一个与 GUI 框架无关的指针、滚轮、键盘或文本输入事件
指针坐标使用与 HitTest 相同的旋转后可视 CropBox 坐标系,原点在可视左上角
分派器会跟踪进入和按下的部件,因此注释的 /E、/X、/D、/U 动作遵循 PDF 触发顺序规则
只有当主按钮在部件上按下并在同一连续进入区域内释放时,才发生指针抬起动作和默认激活
fiekPointerCancel 不分派 /U 即清除捕获;宿主失去指针捕获时应发送它
键盘处理包括 Tab 与 Shift+Tab 焦点遍历、字素安全的 Backspace 与 Delete、方向性选择移动、感知行的上下移动、Home 与 End、文本字段的 Enter 与 Escape、按钮激活,以及全选、撤销、重做的 Control/Meta 快捷键
fiekTextInput 接受完整的 WideString 输入,宿主因此可以转发组合后或增补的 Unicode 文本,而不必降为平台按键码
垂直滚轮增量是规范化后的逻辑步长,而不是操作系统常量;正值选择更靠前的 choice 项,负值选择更靠后的项
声明
function DispatchInputEvent(
const InputEvent: TPDFlibFormInputEvent;
out InputResult: TPDFlibFormInputResult): Integer;
参数
| InputEvent | 事件种类及该种类所需的字段 |
|---|---|
| InputResult | 处理结果,以及随之产生的焦点、悬停、按下、值和选定状态 |
事件字段
| 指针移动、按下、抬起和双击 | 设置 Page、X 和 Y;按下和抬起还需设置 Button |
|---|---|
| 指针离开和取消 | 无需坐标 |
| Wheel | 设置 Page、X、Y 和规范化的 WheelDeltaX 或 WheelDeltaY |
| 按键按下和抬起 | 设置 Key 以及所有处于活动状态的 Modifiers |
| 文本输入 | 把 Text 设为要插入或替换的组合文本 |
返回值
事件结构有效且被接受分发时返回 1,包括刻意保持未处理以让宿主执行自身回退的事件
事件无效、指针坐标无效、会话已分离或输入分发重入时返回
0
通过
InputResult.Handled 判断是否仍需宿主回退
示例
var
InputEvent: TPDFlibFormInputEvent;
InputResult: TPDFlibFormInputResult;
begin
InputEvent.Kind := fiekPointerDown;
InputEvent.Page := PageNumber;
InputEvent.X := PageX;
InputEvent.Y := PageY;
InputEvent.Button := fibPrimary;
InputEvent.Modifiers := [fimShift];
Session.DispatchInputEvent(InputEvent, InputResult);
InputEvent.Kind := fiekTextInput;
InputEvent.Text := ComposedText;
Session.DispatchInputEvent(InputEvent, InputResult);
end;
另请参阅
TPDFlibFormInputEvent, TPDFlibFormInputResult, TPDFlibFormSession, HitTest, FocusNext