function FormFieldZOrderAt(X, Y: Integer): Integer;
| X, Y | Integer. Пиксельные координаты относительно элемента просмотра, те же координаты, что получают события мыши |
Выполняет Hit-тест экранного пикселя против виджетных аннотаций AcroForm текущей страницы и сообщает позицию в стеке у самой верхней. Просмотрщик сперва преобразует (X, Y) в координаты пространства страницы через DeviceToPage с учётом Zoom, Rotation, режима отображения, полей страницы и прокрутки, а затем вызывает нативную FPDFPage_FormFieldZOrderAtPoint с форм-хендлом страницы
Большее возвращаемое значение означает, что виджет лежит ближе к зрителю, то есть нарисован поверх полей с меньшими значениями. Z-order здесь — порядок верхнего Hit-теста стека аннотаций, а не индекс виджета, поэтому обращайтесь с этими значениями как с непрозрачными числами для сравнения
Там, где виджет формы и аннотация ссылки перекрываются, сравните этот результат с 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;