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 puede introducir el código se encuentra en la pestaña Advanced del cuadro de diálogo de propiedades. 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 agregará 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, el código generado se puede copiar o editar.
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. La única excepción 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

A veces necesitará asignar valores distintos a un mismo parámetro. Esto puede hacerse mediante el operador “if… then”:if Element1.IsNull then { MaxErrors: 3, 0.25; } else { MaxErrors: 5, 0.5; }
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 );
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 formulará una hipótesis nula para el objeto correspondiente:if Element1.IsNull() then DontFind()
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 las funciones Nearest, NearestX y NearestY:
  • Nearest( [nombre del elemento] ) - 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.
Nota. No puede usar varias funciones Nearest al mismo tiempo.
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 hacer referencia 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;(consulte la descripción de la función PageRect para obtener más detalles)b. Para especificar que un elemento está ubicado en la última página de un documento (puede escribir este código solo 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 está ubicado en la página donde comienza un elemento llamado SearchElements.OtherElement:if SearchElements.OtherElement.IsFound then RestrictSearchArea( WholePage, SearchElements.OtherElement.Pages.Start );d. Para especificar que un elemento puede estar ubicado en cada página 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 estar ubicado en cada página debajo del body de cada subtabla de una tabla llamada SearchElements.Table:Below: SearchElements.Table.AllSubTables.Body.PageAreaGlobal( PageNumber ).Bottom;

Consulte también:

FlexiLayout language