function FormFieldZOrderAt(X, Y: Integer): Integer;
| X, Y | Integer. 뷰어 컨트롤 기준 픽셀 좌표로, 마우스 이벤트가 받는 것과 같은 좌표입니다 |
화면 픽셀을 현재 페이지의 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;