> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# RestrictSearchArea で検索領域を制限する

> FlexiLayout Studio で RestrictSearchArea を使用して、検索領域をRectangle、矩形配列、または region として設定し、要素の検索条件の重複を避けます。

`RestrictSearchArea` 関数を使用すると、検索領域をRectangle、矩形の配列、または region として指定できます。

<div id="when-to-use-restrictsearcharea">
  ## RestrictSearchArea を使用する場合
</div>

Document のページごとに、目的の field がその名前に対して異なる位置にあることがよくあります。たとえば、あるページでは field が名前の右側にあり、別のページでは名前の下にある場合があります。このようなケースでは、検索領域を矩形の配列として指定することをお勧めします。

このような場合に `RestrictSearchArea` 関数を使用する方法について詳しくは、[Nearest と FuzzyQuality を使用した要素の検索](/ja/flexi-capture/fls/tips-tricks/date9) を参照してください。

また、複数の 要素 に対して同一の検索条件を重複して設定する代わりに、`RestrictSearchArea` 関数を使用したほうがよい場合もあります。

この関数は、何らかの理由 (たとえば、画質が低い、または layout 上の特性があるなど) で、1 種類の 要素 だけでは不十分な場合に、日付フィールド やその他の field の検索領域を記述するために使用します。

<div id="the-searchofdatefsp-project-with-duplicated-constraints">
  ## 検索条件が重複した SearchOfDate.fsp プロジェクト
</div>

`RestrictSearchArea` 関数は、日付フィールド を検索するためにも使用できます。原則として、日付フィールド の検索には、少なくとも **Date** と **Character String** という 2 種類の 要素 を使用してください。ただし、画質が非常に低い場合は、これら 2 つの 要素 だけでは不十分なことがあります。日付フィールド の検索をどのように構成するかについて詳しくは、[高品質または低品質の認識後の日付検索](/ja/flexi-capture/fls/tips-tricks/date2) を参照してください。

この関数の動作を確認するには、サンプル プロジェクト `SearchOfDate.fsp` (フォルダー `%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\RestrictSearchArea`) を実行します。このプロジェクトは、`Date\FCS` プロジェクト フォルダー内にある同名のプロジェクトのコピーです。このプロジェクト内のすべての 要素 (**DateField**、**DateAsString**、**DateAsObjectCollection**) の検索条件は、次の図に示すように同一でした。

<Frame>
  <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/prop_search_elements_alt.png?fit=max&auto=format&n=r-nfa7jujx5b9gKX&q=85&s=f0072e7dde2ac94ef93ec8fb5f762249" alt="ABBYY FlexiLayout Studio の検索要素のプロパティにある Relations タブ のスクリーンショット。SearchOfDate.fsp プロジェクトで DateField、DateAsString、DateAsObjectCollection の各 要素 に対して元々指定されていた同一の検索条件が表示されています。" width="431" height="455" data-path="images/flexi-capture/fls/prop_search_elements_alt.png" />
</Frame>

<div id="replace-duplicated-constraints-with-restrictsearcharea">
  ## 重複した制約を`RestrictSearchArea`に置き換える
</div>

ただし、このプロジェクトでは、**DateAsString** 要素と **DateAsObjectCollection** 要素について **Relations** タブで検索条件を重複して設定する代わりに、`RestrictSearchArea` 関数を使用し、**Advanced** タブの **Advanced pre-search relations** field に次のコードを記述します。

```text theme={null}
if (DateField.IsNull == FALSE) then Dontfind();
else RestrictSearchArea (DateField.Rect);
```

このコードは、日付フィールドを string または object collection として検索する処理が、FlexiLayout Studio が **Date** 要素でそれを検出できなかった場合にのみ実行されることを意味します。その後、両方の要素は、**DateField** 要素が検出されなかったのと同じ領域内で検索されます。

これは、`DateField.Rect` メソッドが **DateField** 要素の hypothesis を囲む Rectangle を返すためです。hypothesis が見つからなかったため、その Rectangle は 検索領域 と一致します。

したがって、**DateAsString** 要素と **DateAsObjectCollection** 要素に指定された 検索領域 は、検出されなかった **DateField** 要素の 検索領域 を囲む Rectangle と一致します。
