function LinkZOrderAt(X, Y: Integer): Integer;
| X, Y | Integer. مختصات پیکسلی نسبت به کنترل بیننده؛ همان مختصاتی که رخدادهای ماوس میگیرند |
یک پیکسل صفحهنمایش را با حاشیهنویسیهای لینک نیتیو صفحهٔ فعلی hit-test میکند و موقعیت چیدمانی بالاترینشان را گزارش میدهد. بیننده (X, Y) را با DeviceToPage — با رعایت Zoom، Rotation، حالت نمایش، padding صفحه و آفست اسکرول — به مختصات فضای صفحه تبدیل میکند و سپس FPDFLink_GetLinkZOrderAtPoint را روی دستهٔ صفحه صدا میزند؛ همان تست نقطهای نیتیوی که LinkAnnotationAtPos به کار میبرد
مقدار بازگشتی بزرگتر یعنی لینک نزدیکتر به بیننده چیده شده، یعنی روی لینکهایی با مقادیر کوچکتر رسم شده. z-order اینجا ترتیب hit-test بالاترینِ پشتهٔ حاشیهنویسی است، نه اندیس لینک؛ پس مقادیر را اعداد مقایسهای غیرشفاف ببینید
این تست مستقیماً از صفحه میپرسد و به محیط فرم نیازی ندارد؛ پس حتی وقتی سند AcroFormی ندارد هم کار میکند و با AllowFormEvents هم گره نخورده است. جایی که لینک و ویجت فرم همپوشانی دارند، این نتیجه را با FormFieldZOrderAt مقایسه کنید: مقدار بزرگتر مشخص میکند PDFium کدام حاشیهنویسی را در آن پیکسل برخوردکرده میداند
همتای TPdf یعنی TPdf.LinkZOrderAtPoint(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 (LinkZ >= 0) and (LinkZ > FieldZ) then
Caption := 'link wins the hit';
end;