True를 반환하는 hit-test입니다property HasFormFieldAt[X, Y: Single]: Boolean; // read only
HasFormFieldAt는 현재 활성 page에서 hit-test를 수행합니다. 지정한 (X, Y) 좌표가 어떤 widget annotation rectangle 안에 들어가면 True를 반환합니다. 좌표는 PDF user space를 사용하며 PageWidth / PageHeight와 같은 좌표계입니다. 원점은 왼쪽 아래이고, X는 오른쪽으로 증가하며, Y는 위로 증가하고, 단위는 point (1/72 inch)입니다
이 property는 Active가 False이거나, 문서에 AcroForm widget이 없거나, 전달한 좌표가 어떤 widget rectangle에도 닿지 않으면 False를 반환합니다. PDFium의 FPDFPage_HasFormFieldAtPoint를 감싼 상수 시간 wrapper이며, 값이 초당 여러 번 조회되는 viewer의 mouse-move / hover feedback에 적합합니다
이 hit-test는 appearance bounds가 아니라 widget rectangle만 판정합니다. visible glyph가 widget rect보다 작은 push button이나 check box도 전체 rect에 대해 True를 반환합니다. hit-test로 커서가 field 위에 있는 것이 확인되면 FormFieldInfoAt[X, Y]와 함께 사용해 일치한 field의 record를 가져오세요. 이렇게 하면 모든 mouse-move event마다 더 무거운 info fetch를 하지 않아도 됩니다
TPdfView.DeviceToPage를 통해 변환하거나, 이 property를 호출하기 전에 inverse Zoom / scroll offset을 직접 적용하세요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;