Les relations avancées de pré-recherche permettent de définir des contraintes de recherche et des propriétés d’élément dans un langage FlexiLayout spécial. Le volet dans lequel vous saisissez votre code se trouve dans l’onglet Advanced de la boîte de dialogue Properties.
Le code que vous saisissez dans le volet Advanced pre-search relations est exécuté immédiatement avant la recherche de l’objet image correspondant à l’élément FlexiLayout. Le programme utilise d’abord les propriétés que vous avez définies dans les onglets situés à gauche de l’onglet Advanced, puis exécute le code. Si un paramètre donné est spécifié à la fois dans un onglet situé à gauche de l’onglet Advanced et dans le code de l’onglet Advanced, le code a priorité. Si un paramètre est spécifié dans un onglet situé à gauche de l’onglet Advanced mais n’est pas spécifié dans le code, la valeur définie dans l’onglet correspondant sera utilisée.
La fonction SearchText (élément Static Text) constitue une exception. Cette fonction va ajouter des mots de recherche à ceux déjà spécifiés dans l’onglet Static Text.
Si vous avez défini certaines propriétés dans l’un des onglets situés à gauche de l’onglet Advanced, vous pouvez les convertir en code en cliquant sur le bouton Code de l’onglet Advanced. Le code généré peut ensuite être copié ou modifié.
Les contraintes supplémentaires saisies dans le volet Advanced pre-search relations ne peuvent faire référence qu’à des éléments situés au-dessus de l’élément actif dans l’arborescence FlexiLayout. Les seules exceptions concernent les sous-éléments d’un même élément Repeating Group, qui peuvent faire référence à des instances précédentes de sous-éléments situés dans le même groupe, en dessous de l’élément donné.
Spécifier différentes valeurs pour un même paramètre
Il est parfois nécessaire d’attribuer différentes valeurs à un même paramètre. Pour ce faire, utilisez l’opérateur “if… then” :
if Element1.IsNull then {
MaxErrors: 3, 0.25;
} else {
MaxErrors: 5, 0.5;
}
Limiter la zone de recherche
La zone de recherche peut être définie à l’aide de n’importe lequel des types qui décrivent une zone de l’image : Rect, RectArray, Region. Elle peut également être définie à l’aide d’une expression qui renvoie l’un de ces types. Le résultat du calcul de l’expression est transmis comme argument à la fonction RestrictSearchArea() :
a.
RestrictSearchArea( Rect(Rect( Page( 1 ).RectGlobal.Left, Page( 1 ).RectGlobal.Top+20*mm, Element1.Left.Start, Element2.Ycenter.Start ) );
b.
let rect1 = Element1.Rect;
let rect2 = Element2.Rect;
RestrictSearchArea( rect1 or rect2 );
Annuler la recherche d’un objet
Pour certains documents, la présence d’un objet sur l’image exclut automatiquement la présence d’un autre objet. Dans d’autres cas, vous voudrez peut-être rechercher un objet particulier uniquement si certaines conditions sont remplies. Vous pouvez indiquer au programme de ne pas rechercher un objet spécifique à l’aide de la commande DontFind(). Une fois cette commande exécutée, le programme formule une hypothèse nulle pour l’objet correspondant :
if Element1.IsNull() then DontFind()
Sélectionner une hypothèse
Il arrive que plusieurs objets d’image remplissent les conditions spécifiées dans un élément. Cela signifie que le programme formulera plusieurs hypothèses. Si vous devez sélectionner dans cet ensemble uniquement l’hypothèse la plus proche d’un autre objet ou d’un point de l’image, vous pouvez utiliser les fonctions Nearest, NearestX et NearestY :
- Nearest( [nom de l’élément] ) — définit le nom de l’élément le plus proche.
- Nearest( x1, y1 ) — définit les coordonnées du point le plus proche.
- NearestX( x1 ) — définit la coordonnée X de la ligne verticale la plus proche.
- NearestY( y1 ) — définit la coordonnée Y de la ligne horizontale la plus proche.
Vous ne pouvez pas utiliser plusieurs fonctions Nearest simultanément.
Recherche dans les documents multipages
Le programme traite un document multipage comme une seule entité et peut rechercher un élément d’un document multipage sans référence à une page précise.
Par exemple :
a. Pour indiquer qu’un élément peut se trouver dans la moitié inférieure de n’importe quelle page :
Below: PageRect.Top + PageRect.Height / 2;
Pour plus d’informations, consultez la description de la fonction PageRect.
b. Pour indiquer qu’un élément se trouve sur la dernière page d’un document (vous pouvez écrire ce code uniquement dans la partie principale du FlexiLayout, après les éléments Header and Footer, le cas échéant) :
RestrictSearchArea( Page( PagesCount ).RectGlobal );
c. Pour préciser qu’un élément se trouve sur la page où débute un élément nommé SearchElements.OtherElement :
if SearchElements.OtherElement.IsFound then RestrictSearchArea( WholePage, SearchElements.OtherElement.Pages.Start );
d. Pour préciser qu’un élément peut être situé sur chaque page sous les instances des hypothèses d’un groupe répétitif nommé SearchElements.RepeatableGroup :
Below: SearchElements.RepeatableGroup.AllInstances.PageAreaGlobal( PageNumber ).Region.Bottom;
e. Pour indiquer qu’un élément peut se trouver sur chaque page, sous le corps de chaque sous-tableau d’un tableau nommé SearchElements.Table :
Below: SearchElements.Table.AllSubTables.Body.PageAreaGlobal( PageNumber ).Bottom;