Propriétés définies par l’utilisateur dans le langage FlexiLayout : déclarez des variables typées dans la section champs externes pour partager des valeurs d’hypothèse entre les éléments.
Une propriété définie par l’utilisateur est une variable typée qui appartient à un élément. Ces propriétés sont définies dans la section Champs externes de l’onglet Avancé. Le format suivant doit être respecté :Type1 Name1;…TypeN NameN;où Name est le nom de la variable et Type son type.Lorsque des champs sont créés, ils sont initialisés comme suit : les champs numériques sont initialisés à zéro, les rectangles et les régions sont initialisés avec des valeurs vides, etc.Les champs peuvent être utilisés dans l’élément auquel ils appartiennent et dans tous les éléments situés en dessous de celui-ci. La valeur d’un champ ne peut être modifiée que dans l’élément auquel il appartient ; dans les autres éléments, il est disponible en lecture seule.La valeur d’une expression complexe qui caractérise l’hypothèse d’un élément peut être calculée et écrite dans cette propriété. Cette valeur est alors accessible depuis n’importe lequel des éléments situés en dessous, sans avoir à la recalculer chaque fois qu’elle est nécessaire. Cela réduit le temps requis pour la mise en correspondance du FlexiLayout, évite d’avoir à recopier une expression longue dans chacun des éléments et rend le code plus lisible.Pour accéder au champ d’un élément, son nom complet est utilisé au format suivant : ElementName.FieldName (par ex. SearchElements.StaticText1.x). Dans un élément, il est possible d’accéder à son champ par son nom : x. Dans le cas d’un élément composé, ses sous-éléments (à n’importe quel niveau d’imbrication) peuvent également accéder à ses champs par leurs noms courts.Dans un élément, les noms des champs doivent être uniques. Les noms des éléments d’un élément composé ne peuvent coïncider avec aucun des noms de champ de ses sous-éléments (à n’importe quel niveau d’imbrication). En outre, les noms des champs d’un élément composé ne peuvent coïncider avec aucun des noms de ses sous-éléments.
Exemple
Cet exemple recherche deux éléments d’adresse : la ville (Character String City) et la station de métro (Character String Station). La station de métro n’est spécifiée que si la ville est Moscow. Pour accélérer la mise en correspondance du FlexiLayout, nous définissons une propriété fromMoscow pour l’élément City. Cette propriété vaut true si l’élément City est détecté et a pour valeur Moscow, et false dans tous les autres cas.Code de l’élément City :Champs externeslogic fromMoscow;Relations avancées après rechercheif( not IsNull and Value.Find( “Moscow” ) >= 0 ) then fromMoscow = true;
else fromMoscow = false;Nous utilisons ensuite cette propriété pour rechercher la station de métro. Pour accélérer le processus de mise en correspondance, nous recherchons la station uniquement si Moscow est détecté comme élément City.Code de l’élément Station :Relations avancées avant recherche
if not City.fromMoscow then dontfind;
En raison des champs, les éléments de même type ne sont pas traités comme identiques. Ainsi, les constructions du type suivant sont interdites :
Let e = SearchElements.StaticText1;
e = SearchElements.StaticText2;// élément du même type