property FormFieldInfoAt[X, Y: Single]: TPdfFormFieldInfo; // read only
FormFieldInfoAt effectue un hit-test sur la page actuellement active et renvoie le TPdfFormFieldInfo décrivant l’annotation de widget à (X, Y). Les coordonnées sont en espace utilisateur PDF, avec l’origine au coin inférieur gauche de la page et des unités exprimées en points (1/72 pouce). L’enregistrement reflète ce que renvoie FormFieldInfo[Index] — type de champ (fiTextField, fiCheckBox, …), nom de champ, nom alternatif, drapeaux, étiquettes d’option, état coché, valeur d’export et taille de police
Lorsque la coordonnée ne tombe à l’intérieur d’aucun rectangle de widget, FormFieldInfoAt renvoie un TPdfFormFieldInfo initialisé par défaut — FieldType = fiUnknown et chaînes vides partout. Utilisez HasFormFieldAt[X, Y] pour une vérification bon marché oui/non avant de récupérer l’enregistrement complet, ou vérifiez simplement le FieldType
La recherche est en O(n) sur les widgets de la page et décode en plus les métadonnées Unicode des champs, elle est donc plus lourde que HasFormFieldAt. Dans un gestionnaire de déplacement de souris, testez HasFormFieldAt d’abord ; n’appelez FormFieldInfoAt qu’au clic ou à l’entrée de survol. Les coordonnées issues d’une position souris passent d’abord par TPdfView.PointToPage pour convertir les pixels appareil en unités de page
/Annots gagne)FieldType = fiSignature — combinez avec SignatureCount pour énumérer l’état de signature séparémentFormFieldAt invalide les enregistrements en cache ; relisez après chaque écriture
procedure TForm1.PdfView1Click(Sender: TObject);
var Info: TPdfFormFieldInfo;
PageX, PageY: Double;
begin
PdfView1.PointToPage(Mouse.CursorPos.X, Mouse.CursorPos.Y, PageX, PageY);
Info := Pdf1.FormFieldInfoAt[PageX, PageY];
if Info.FieldType <> fiUnknown then
ShowMessage(Info.Name);
end;