Saltar al contenido principal
Las relaciones avanzadas de prebúsqueda establecen restricciones de búsqueda y propiedades de los elementos en un FlexiLayout language especial. El panel en el que introduce el código se encuentra en la pestaña Advanced del cuadro de diálogo Properties. El código que introduzca en el panel de relaciones avanzadas de prebúsqueda se ejecuta inmediatamente antes de buscar el objeto de imagen correspondiente al elemento de FlexiLayout. Primero, el programa usará las propiedades que haya especificado en las pestañas situadas a la izquierda de la pestaña Advanced y, a continuación, ejecutará el código. Si un parámetro concreto se especifica tanto en una pestaña situada a la izquierda de la pestaña Advanced como en el código de la pestaña Advanced, el código tendrá prioridad. Si un parámetro se especifica en una pestaña situada a la izquierda de la pestaña Advanced, pero no se especifica en el código, se usará el valor del parámetro de la pestaña correspondiente.
La función SearchText (elemento de texto estático) es una excepción. Esta función agrega palabras de búsqueda a las ya especificadas en la pestaña texto estático.
Si ha especificado algunas propiedades en cualquiera de las pestañas situadas a la izquierda de la pestaña Advanced, puede convertirlas en código haciendo clic en el botón Code de la pestaña Advanced. Después, puede copiar o editar el código generado.
Las restricciones adicionales introducidas en el panel de relaciones avanzadas de prebúsqueda solo pueden hacer referencia a elementos situados encima del elemento actual en el árbol de FlexiLayout. Las únicas excepciones son los subelementos del mismo elemento de grupo repetido, que pueden hacer referencia a instancias anteriores de subelementos situados en el mismo grupo debajo del elemento dado.

Ejemplos

Especificar distintos valores para un mismo parámetro

A veces es necesario asignar distintos valores a un mismo parámetro. Para ello, utilice el operador if... then:
if Element1.IsNull then {
MaxErrors: 3, 0.25;
} else {
MaxErrors: 5, 0.5;
}

Limitar el área de búsqueda

El área de búsqueda puede especificarse mediante cualquiera de los tipos que definen un área de imagen: Rect, RectArray, Region. También puede especificarse mediante una expresión que devuelva cualquiera de estos tipos. El resultado del cálculo de la expresión se pasa como argumento a la función 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 );

Cancelar la búsqueda de un objeto

En algunos documentos, la presencia de un objeto en la imagen excluye automáticamente otro objeto. En otros casos, puede que desee buscar un objeto determinado solo si se cumplen ciertas condiciones. Puede indicarle al programa que no busque un objeto específico mediante el comando DontFind(). Una vez ejecutado el comando, el programa formula una hipótesis nula para el objeto correspondiente:
if Element1.IsNull() then DontFind()

Seleccionar una hipótesis

A veces, varios objetos de imagen cumplen las condiciones especificadas en un elemento. Esto significa que el programa formulará varias hipótesis. Si necesita seleccionar de este conjunto únicamente la hipótesis situada más cerca de otro objeto o punto de la imagen, puede usar una de las siguientes funciones:
FunciónDescripción
Nearest( [name of element] )Establece el nombre del elemento más cercano.
Nearest( x1, y1 )Establece las coordenadas del punto más cercano.
NearestX( x1 )Establece la coordenada X de la línea vertical más cercana.
NearestY( y1 )Establece la coordenada Y de la línea horizontal más cercana.
No puede usar varias funciones Nearest al mismo tiempo.

Búsqueda en documentos de varias páginas

El programa trata un documento de varias páginas como una sola entidad y puede buscar un elemento en un documento de varias páginas sin referirse a una página concreta. Por ejemplo: a. Para especificar que un elemento puede encontrarse en la mitad inferior de cualquier página:
Below: PageRect.Top + PageRect.Height / 2;
Para obtener más información, consulte la descripción de la función PageRect. b. Para especificar que un elemento está en la última página de un documento (este código solo puede escribirse en la parte principal del FlexiLayout, después de los elementos Header y Footer, si los hay):
RestrictSearchArea( Page( PagesCount ).RectGlobal );
c. Para especificar que un elemento se encuentra en la página donde comienza un elemento denominado SearchElements.OtherElement:
if SearchElements.OtherElement.IsFound then RestrictSearchArea( WholePage, SearchElements.OtherElement.Pages.Start );
d. Para especificar que un elemento puede ubicarse en cada página por debajo de las instancias de las hipótesis de un grupo repetido llamado SearchElements.RepeatableGroup:
Below: SearchElements.RepeatableGroup.AllInstances.PageAreaGlobal( PageNumber ).Region.Bottom;
e. Para especificar que un elemento puede ubicarse en cada página debajo del cuerpo de cada subtabla de una tabla llamada SearchElements.Table:
Below: SearchElements.Table.AllSubTables.Body.PageAreaGlobal( PageNumber ).Bottom;