DispatchInputEvent
表單、互動、輸入
描述
透過目前 TPDFlibFormSession 分派一個不依賴 GUI 框架的指標、滾輪、鍵盤或文字輸入事件
指標座標使用與 HitTest 相同的旋轉後視覺 CropBox 座標系統,原點在視覺左上角
分派器會追蹤進入與按住的 Widget,讓註解的 /E、/X、/D 與 /U 動作遵循 PDF 觸發順序規則
只有當主按鍵在某 Widget 上按下、且在同一個未中斷的進入區域內放開時,才會觸發 pointer-up 動作與預設啟用
fiekPointerCancel 會清除擷取狀態而不分派 /U,主程式失去指標擷取時應送出此事件
鍵盤處理涵蓋 Tab 與 Shift+Tab 焦點巡覽、字位安全的 Backspace 與 Delete、方向性選取移動、感知換行的上與下移動、Home 與 End、文字欄位的 Enter 與 Escape、按鈕啟用,以及全選、復原、重做的 Control 或 Meta 快捷鍵
fiekTextInput 接受完整的 WideString 輸入,主程式因此能轉送組字或輔助 Unicode 文字,不必降成平台按鍵碼
垂直滾輪增量是正規化的邏輯步階,不是作業系統常數;正值選擇較前面的選項,負值選擇較後面的選項
宣告
function DispatchInputEvent(
const InputEvent: TPDFlibFormInputEvent;
out InputResult: TPDFlibFormInputResult): Integer;
參數
| InputEvent | 事件種類與該種類所需的欄位 |
|---|---|
| InputResult | 處理結果,以及最終的焦點、懸停、按下、值與選取狀態 |
事件欄位
| 指標移動、按下、放開與按兩下 | 設定 Page、X 與 Y;down 與 up 還要設定 Button |
|---|---|
| 指標離開與取消 | 不需要座標 |
| 滾輪 | 設定 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