DispatchInputEvent

フォーム、インタラクション、入力

説明

GUIフレームワークに依存しないポインター、ホイール、キーボード、テキスト入力イベントを1件、現在のTPDFlibFormSessionを通じてディスパッチします

ポインター座標はHitTestと同じ回転済みビジュアルCropBox座標系を使い、原点はビジュアル左上です

ディスパッチャーは進入中と押下中のWidgetを追跡するため、注釈の/E、/X、/D、/UアクションはPDFトリガー順序ルールに従います

ポインターアップによるアクションと既定のアクティブ化は、プライマリボタンがWidget上で押され、同じ途切れない進入領域の内側で離されたときにのみ発生します

fiekPointerCancelは/Uをディスパッチせずにキャプチャをクリアします。ホストがポインターのキャプチャを失ったときに送るべきです

キーボード処理には、TabとShift+Tabのフォーカス移動、書素セーフなBackspaceとDelete、方向付き選択移動、行を認識するUpとDown移動、HomeとEnd、テキストフィールドのEnterとEscape、ボタンのアクティブ化、全選択・取り消し・やり直しのControl/Metaショートカットが含まれます

fiekTextInputは完全なWideString入力を受け入れるため、ホストは合成済みや補助のUnicodeテキストをプラットフォームのキーコードへ縮めることなく転送できます

垂直ホイールのデルタはOS定数ではなく正規化された論理ステップです。正の値はより前のチョイス項目を、負の値はより後の項目を選択します

宣言

function DispatchInputEvent(
  const InputEvent: TPDFlibFormInputEvent;
  out InputResult: TPDFlibFormInputResult): Integer;

パラメータ

InputEventイベントの種類と、その種類が要求するフィールド
InputResult処理結果と、その結果としてのフォーカス、ホバー、押下、値、選択の各状態

イベントフィールド

ポインタ移動、押下、解放、ダブルクリックPage、X、Yを設定します。押下と解放ではさらに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