PDFium Delphi Component Docs

FormFieldZOrderAt メソッド

コンポーネント: TPdfView  ·  ユニット: PDFium
ビューのピクセル (X, Y) でヒットした最前面の AcroForm フィールドのスタッキング順序を返します。ヒットしない場合は -1 を返します

構文

function FormFieldZOrderAt(X, Y: Integer): Integer;

パラメーター

X, YInteger. ビューアコントロール基準のピクセル座標。マウスイベントが受け取るのと同じ座標です

戻り値

Integer. ヒットテストした地点にあるフォームフィールドの z-order。フォームフィールドがヒットしないか、テストを実行できない場合は -1 です

説明

画面上の 1 ピクセルを現在ページの AcroForm ウィジェットアノテーションに対してヒットテストし、最前面にあるもののスタッキング位置を報告します。ビューアはまず DeviceToPage で (X, Y) をページ空間座標に変換します。この変換は Zoom、Rotation、表示モード、ページパディング、スクロールオフセットを考慮し、その後ページのフォームハンドルを渡して PDFium の FPDFPage_FormFieldZOrderAtPoint を呼び出します

戻り値が大きいほど、そのウィジェットはビューアに近い位置にスタッキングされている、つまり小さい値のフィールドの上に描画されていることを意味します。ここでの z-order はアノテーションスタックの最前面ヒットテスト順序であり、ウィジェットのインデックスではないため、値は比較専用の不透明な数値として扱ってください

フォームウィジェットとリンクアノテーションが重なる場所では、この結果を LinkZOrderAt と比較します。両方の値は同じアノテーションスタッキング順序に由来し、大きい方がそのピクセルで PDFium がヒットとみなすアノテーションを示します

TPdf 側の対応物 TPdf.FormFieldZOrderAtPoint(X, Y: Double) は同じ PDFium 関数をラップします。こちらはページ空間座標を Double で直接受け取り、アクティブなページがないかフォーム環境が初期化されていない場合には例外を発生します。一方 TPdfView ラッパーはソフトフェイルで -1 を返します

備考

procedure TForm1.PdfView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  FieldZ, LinkZ: Integer;
begin
  FieldZ := PdfView1.FormFieldZOrderAt(X, Y);
  LinkZ := PdfView1.LinkZOrderAt(X, Y);
  if (FieldZ >= 0) and (FieldZ > LinkZ) then
    Caption := 'form field wins the hit';
end;

関連項目

LinkZOrderAt, HasFormFieldAt, FormFieldInfoAt, FormFieldTypeAt, DeviceToPage, AllowFormEvents