Share via


条件文

重要

プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。

詳細については、プリントサポートアプリデザインガイド.

GPD 言語には、一部のプリンター属性がプリンターの構成に与えることができる依存関係を記述できる、C のような条件付きステートメントが用意されています。 たとえば、ページの余白とカーソルの原点は、ページの向きに依存しています。 *Switch ステートメントと *Case ステートメントを使用すると、このような依存関係を表現できます。 これらのステートメントの形式は次のとおりです。

*Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } etc. *Case OptionN_Name { } *Default { } }

FeatureName は、*Feature エントリを含む GPD ファイル内で指定される機能の名前である必要があります。 使用するオプション名は、指定した機能に関連付けられているオプションである必要があります。

ページの余白とカーソルの原点がページの向きに依存していることを表すために、次のエントリを使用できます。

*Feature: Orientation
{
    *DefaultOption: Portrait
    *Option: Portrait
    {
        *Name: "Portrait"
        *rcIconID: =RC_ICON_PORTRAIT
    }
    *Option: LANDSCAPE_CC90
    {
        *Name: "Landscape"
        *rcIconID: =RC_ICON_LANDSCAPE
    }
}
*Feature: PaperSize
{
    *DefaultOption: Letter
    *Option: Letter
    {
        *Name: "Letter 8.5 x 11 inch"
        *switch: Orientation
        {
            *case: Portrait
            {
                *PrintableArea: PAIR(4800, 6324)
                *PrintableOrigin: PAIR(150, 150)
                *CursorOrigin: PAIR(150,100)
            }
            *case: LANDSCAPE_CC90
            {
                *PrintableArea: PAIR(4860, 6360)
                *PrintableOrigin: PAIR(120, 120)
                *CursorOrigin: PAIR(100,6480)
            }
        }
    }
}

この例では、プリンターの PaperSize 機能のオプションは、プリンターの向き機能の選択したオプションによって異なります。

機能のすべてのオプションを *Case ステートメント引数として一覧表示しない場合は、C 言語と同様に *Default ステートメントを含めることができます。 すべてのオプションを含めず、*Default ステートメントも含めない場合は、*Switch ステートメントの前にある GPD ファイルの他の場所で、関連する属性 (例: *PrintableArea、*PrintableOrigin*CursorOrigin) を評価する必要があります。

複数の依存関係の指定

*Case ステートメントと *Default ステートメント内に *Switch ステートメントを含めることができます。 これにより、次のように複数の依存関係を指定できます。

*Feature: feature1 {*Option: optionA {...} *Option: optionB {...}}
*Feature: feature2 {*Option: optionC {...} *Option: optionD {...}}
*Feature: feature3 
    {*Option: optionE 
        {*Switch: feature1 
            {*Case: optionA
                 {*Switch: feature2
                     {*Case: optionD
                         {AttributeX: ValueX}
                      *Default
                         {AttributeX: ValueY}
                     }
                 }
             *Default
                  {AttributeX: ValueZ}
             }
         }
    *Option: optionF {...} 
    }

この例では、Feature3 の optionE に属する AttributeX は、feature1 と feature2 の両方に依存しています。

ユーザーが feature1 の optionA、feature2 の optionD、feature3 の optionE を選択した場合、attributeX は ValueX に設定されます。

ユーザーが feature1 の optionA、feature2 の optionC、feature3 の optionE を選択した場合、attributeX は ValueY に設定されます。

ユーザーが feature1 に optionB を選択し、feature3 に optionE を選択した場合、attributeX は ValueZ に設定されます。 Feature2 の設定は関係しません。

複数の依存関係を指定する場合は、次の規則が適用されます。

  • 1 つの *Switch エントリのスコープ内で複数の依存関係を指定する必要があります。 例を使用すると、*Switch エントリを使用して feature3 が feature1 に依存していることを示すことはできません。その後、入れ子になっていない *Switch ステートメントでは、feature3 が feature2 に依存していることを示します。

  • 入れ子になった各 *Switch エントリ内で同じ機能を複数回指定することはできません。

*Switch ステートメントを配置する場所

*Switch ステートメントは、GPD ファイル内の次の場所に配置できます。

  • *Option ステートメント内

  • *Feature ステートメント内

  • *Case ステートメント内

  • *Default ステートメント内

  • ファイルの最上位レベル (つまり、中かっこで囲まれていない)

*Switch、*Case、*Default ステートメント内に配置する内容

*Switch エントリ内では、*Case エントリと *Default エントリのみを配置できます。

*Case または *Default エントリ内に配置できる GPD ファイル エントリは、再配置可能なエントリと呼ばれます。 次の種類の GPD エントリは再配置可能です。

  • ルート レベルのみの属性を除く、ほとんどのプリンター属性。 (*Switch エントリがルート レベル (中かっこ内ではない) でない限り、一般的な属性の前に EXTERN_GLOBAL を配置する必要があります)。

  • 入れ子になった *Switch エントリ。これにより、複数の依存関係を指定できます。

  • *Command エントリ。

  • *TTF Standard Edition可能ですか? フォントの置換を有効にします。

次の種類の GPD エントリは再配置できません。

  • ルート レベルのみの属性

  • 置換フォントを指定するための *TTFS エントリ。

  • *Constraints、*InvalidCombination、*InvalidInstallableCombination、*NotInstalledConstraints エントリ。「オプション制約」の説明に従って、オプションの無効な組み合わせを定義します。

  • *Feature エントリと *Option エントリ (ただし、機能属性オプション属性 は再配置可能)。

*Case ステートメント内にエントリが正しく配置されているかどうかを判断する方法の 1 つは、*Switch ステートメントと *Case ステートメントをすべて削除することです。 *Case ステートメント内のエントリが正しい場合、*Switch ステートメントおよび *Case ステートメントが削除された後も正しいままとなります。

クラス ドライバーから派生した V4 印刷ドライバーでの switch ステートメントの順序付け

派生 v4 プリンター ドライバーの GPD ファイルは、基本のクラス ドライバーと同じ順序に従う必要があります。

次のシナリオについて考えてみます。 *-manifest.ini ファイルのクラス ドライバーに RequiredClass を設定することで、v4 クラス ドライバーから派生した v4 プリンター ドライバーを入手できます。

クラス ドライバーの GPD ファイルには、次のスイッチ ツリーがあります。

* Option: A4
    1. Switch: Resolution
* Option: Letter
    1. Switch: Resolution
    2. Switch: InputBin

派生 v4 プリンター ドライバーは MarginSetting スイッチを追加する必要があるため、GPD ファイルには次のスイッチ ツリーが追加されます。

* Option: A4
    1. Switch: Resolution
    2. Switch: InputBin
    3. Switch: MarginSetting
* Option: Letter
    1. Switch: Resolution
    2. Switch: InputBin
    3. Switch: MarginSetting

解像度は、派生 GPD の InputBin の前に設定され、MarginSetting は両方の後に設定されることにご注意ください。 派生 v4 プリンター ドライバーの GPD ファイルは、基本のクラス ドライバーと同じ順序に従い、後に MarginSetting を追加します。

たとえば、誤って派生した GPD ファイルは次のようになります。

* Option: A4
    1. Switch: MarginSetting
    2. Switch: InputBin
    3. Switch: Resolution
* Option: Letter
    1. Switch: MarginSetting
    2. Switch: InputBin
    3. Switch: Resolution