property HasFormFieldAt[X, Y: Single]: Boolean; // read only
HasFormFieldAt выполняет hit-test на текущей активной странице: он возвращает
True, когда заданная координата (X, Y) попадает внутрь любого
прямоугольника аннотации виджета. Координаты заданы в пользовательском пространстве PDF
— в той же системе координат, что и PageWidth / PageHeight,
с началом отсчета в левом нижнем углу, увеличением X вправо, Y вверх и единицами в пунктах
(1/72 inch)
Свойство возвращает False, когда Active равно False,
когда документ не содержит виджетов AcroForm или когда заданная координата не попадает ни в
один прямоугольник виджета. Это обертка над FPDFPage_HasFormFieldAtPoint с
константным временем работы — она идеально подходит для обратной связи при движении
мыши / hover в просмотрщике, где значение запрашивается много раз в секунду
Hit-test учитывает только прямоугольник виджета — не его границы отображения
appearance. Кнопки и флажки, у которых видимый глиф меньше прямоугольника виджета, все равно
возвращают True для всего прямоугольника. Сочетайте это свойство с
FormFieldInfoAt[X, Y], чтобы получить запись найденного поля после того, как
hit-test подтвердит, что курсор находится над полем; такой шаблон избавляет от более
дорогого получения информации на каждом событии движения мыши
TPdfView.DeviceToPage или самостоятельно примените обратное смещение
Zoom / scroll перед вызовом этого свойстваFormFieldInfoAt,
когда нужно знать, какое поле было найдено
procedure TForm1.PdfView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var PageX, PageY: Double;
begin
PdfView1.DeviceToPage(X, Y, PageX, PageY);
if Pdf1.HasFormFieldAt[PageX, PageY] then
PdfView1.Cursor := crHandPoint
else
PdfView1.Cursor := crDefault;
end;