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