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