メインコンテンツへスキップ
Advanced pre-search relations では、特殊な FlexiLayout language を使用して、検索制約と要素のプロパティを設定します。コードを入力するペインは、Properties ダイアログの Advanced タブにあります。 Advanced pre-search relations ペインに入力したコードは、FlexiLayout 要素に対応する画像オブジェクトの検索を実行する直前に実行されます。プログラムはまず、Advanced タブの左側にあるタブで指定されたプロパティを使用し、その後でコードを実行します。特定のパラメーターが、Advanced タブの左側にあるタブと Advanced タブ上のコードの両方で指定されている場合は、コードで指定された内容が優先されます。パラメーターが Advanced タブの左側にあるタブで指定されていても、コード内で指定されていない場合は、該当するタブで設定されたパラメーター値が使用されます。
The SearchText function (Static Text 要素) は例外です。この function では、Static Text タブですでに指定されている検索単語に検索単語が追加されます。
Advanced タブの左側にあるいずれかのタブでプロパティを指定している場合は、Advanced タブの Code ボタンをクリックして、それらをコードに変換できます。その後、生成されたコードをコピーまたは編集できます。
Advanced pre-search relations ペインに入力する追加の制約では、FlexiLayout ツリー内で現在の要素より上にある要素のみを参照できます。唯一の例外は、同じ Repeating Group 要素内の subelement で、指定された要素より下にある同じグループ内の subelement の前のインスタンスを参照できます。

同じパラメーターに異なる値を設定する

同じパラメーターに異なる値を設定する必要がある場合があります。その場合は、“if… then” 演算子を使用します。
if Element1.IsNull then {
MaxErrors: 3, 0.25;
} else {
MaxErrors: 5, 0.5;
}

検索範囲を制限する

検索範囲は、画像領域を定義する任意の型 (Rect、RectArray、Region) を使って指定できます。また、これらの型のいずれかを返す式を使って指定することもできます。式の計算結果は、RestrictSearchArea() function の引数として渡されます。 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 );

オブジェクトの検索をキャンセルする

文書によっては、画像上にある1つのオブジェクトが存在すると、別のオブジェクトは自動的に除外されることがあります。また、特定の条件が満たされた場合にのみ、特定のオブジェクトを検索したいケースもあります。DontFind() command を使うと、特定のオブジェクトを検索しないようプログラムに指示できます。この command が実行されると、プログラムは対応するオブジェクトに対して ヌル仮説 を生成します。
if Element1.IsNull() then DontFind()

仮説を選択する

要素で指定された条件を満たす画像オブジェクトが複数見つかることがあります。この場合、プログラムは複数の仮説を生成します。この中から、画像上の別のオブジェクトまたは点に最も近い仮説だけを選択する必要がある場合は、Nearest、NearestX、NearestY 関数を使用できます。
  • Nearest( [要素名] ) — 最も近い要素の名前を設定します。
  • Nearest( x1, y1 ) — 最も近い点の座標を設定します。
  • NearestX( x1 ) — 最も近い垂直線の X 座標を設定します。
  • NearestY( y1 ) — 最も近い水平線の Y 座標を設定します。
複数の Nearest 関数を同時に使用することはできません。

複数ページ文書の検索

プログラムは複数ページ文書を単一の単位として扱い、正確なページを指定しなくても、その中の要素を検索できます。 例: a. 要素を任意のページの下半分で検出できるよう指定するには:
Below: PageRect.Top + PageRect.Height / 2;
詳細については、PageRect 関数の説明を参照してください。 b. 要素が文書の最終ページにあることを指定するには (このコードは、FlexiLayout の主要部分で、Header 要素と Footer 要素 (存在する場合) の後にのみ記述できます) :
RestrictSearchArea( Page( PagesCount ).RectGlobal );
c. 要素が、SearchElements.OtherElement という名前の要素が始まるページにあることを指定するには:
if SearchElements.OtherElement.IsFound then RestrictSearchArea( WholePage, SearchElements.OtherElement.Pages.Start );
d. 要素を、SearchElements.RepeatableGroup という名前の繰り返しグループの仮説インスタンスの下の各ページに配置できるよう指定するには:
Below: SearchElements.RepeatableGroup.AllInstances.PageAreaGlobal( PageNumber ).Region.Bottom;
e. 要素を、各ページで SearchElements.Table という名前のテーブルの各サブテーブルの本体より下に配置できるよう指定するには:
Below: SearchElements.Table.AllSubTables.Body.PageAreaGlobal( PageNumber ).Bottom;