function FormFieldZOrderAt(X, Y: Integer): Integer;
| X, Y | Integer. ビューアコントロール基準のピクセル座標。マウスイベントが受け取るのと同じ座標です |
画面上の 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;