Bedingte Anweisungen

Wichtig

Es wird empfohlen, den IPP-Posteingangsklassentreiber von Microsoft zusammen mit Druckunterstützungs-Apps (PSA) zu verwenden, um die Druckoberfläche in Windows 10 und 11 für die Druckergeräteentwicklung anzupassen.

Weitere Informationen finden Sie im Designhandbuch für Druckunterstützungs-Apps.

Die GPD-Sprache stellt C-ähnliche bedingte Anweisungen bereit, mit denen Sie Abhängigkeiten beschreiben können, die einige Druckerattribute für die Konfiguration eines Druckers aufweisen können. Beispielsweise können die Seitenränder und der Cursorursprung für eine Seite von der Ausrichtung der Seite abhängen. Mit den Anweisungen *Switch und *Case können Sie solche Abhängigkeiten ausdrücken. Das Format dieser Anweisungen ist wie folgt:

* Featurename wechseln { *Case Option1_Name { } *Case Option2_Name { } etc. *Case OptionN_Name { } *Default { } } }

FeatureName muss der Name eines Features sein, das in der GPD-Datei mit einem *Featureeintrag angegeben ist. Die verwendeten Optionsnamen müssen Optionen sein, die dem angegebenen Feature zugeordnet sind.

Um den Fall auszudrücken, in dem Seitenränder und Cursorursprung von der Ausrichtung der Seite abhängig sind, können die folgenden Einträge verwendet werden:

*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)
            }
        }
    }
}

In diesem Beispiel hängen die Optionen für die PaperSize-Funktion des Druckers von der ausgewählten Option für das Ausrichtungsfeature des Druckers ab.

Wenn Sie nicht alle Optionen eines Features als *Case-Anweisungsargumente auflisten, können Sie eine *Default-Anweisung einschließen, genau wie in der Sprache C. Wenn Sie nicht alle Optionen einschließen und keine *Default-Anweisung einschließen, müssen Sie relevante Attribute (im Beispiel *PrintableArea, *PrintableOrigin und *CursorOrigin) an anderer Stelle in der GPD-Datei vor der *Switch-Anweisung auswerten.

Angeben mehrerer Abhängigkeiten

Sie können *Switch-Anweisungen in *Case - und *Default-Anweisungen einschließen. Dadurch können Sie mehrere Abhängigkeiten wie folgt angeben:

*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 {...} 
    }

In diesem Beispiel ist AttributeX, das zu optionE von feature3 gehört, sowohl von feature1 als auch von feature2 abhängig.

Wenn der Benutzer optionA für feature1, optionD für feature2 und optionE für feature3 ausgewählt hat, wird attributX auf ValueX festgelegt.

Wenn der Benutzer optionA für feature1, optionC für feature2 und optionE für feature3 ausgewählt hat, wird attributX auf ValueY festgelegt.

Wenn der Benutzer optionB für feature1 und optionE für feature3 ausgewählt hat, wird attributX auf ValueZ festgelegt. Die Einstellung für Feature2 ist irrelevant.

Beim Angeben mehrerer Abhängigkeiten gelten die folgenden Regeln:

  • Mehrere Abhängigkeiten müssen innerhalb des Bereichs eines einzelnen *Switch-Eintrags angegeben werden. Mithilfe des Beispiels können Sie beispielsweise keinen *Switch-Eintrag verwenden, um anzugeben, dass feature3 von feature1 abhängig ist, und dann in einer nachfolgenden, nicht geschachtelten *Switch-Anweisung angeben, dass feature3 von feature2 abhängig ist.

  • Sie können dasselbe Feature nicht mehr als einmal in jedem geschachtelten *Switch-Eintrag angeben.

Platzieren einer *Switch-Anweisung

Sie können eine *Switch-Anweisung an den folgenden Speicherorten in einer GPD-Datei platzieren:

  • In einer *Option-Anweisung

  • In einer *Feature-Anweisung

  • In einer *Case-Anweisung

  • In einer *Default-Anweisung

  • Auf der obersten Ebene der Datei (d. h. nicht innerhalb einer Gruppe von Klammern)

Was in *Switch-, *Case- und *Standardanweisungen platziert werden soll

In einem *Switch-Eintrag können Sie nur *Groß- und Standardeinträge platzieren.

GPD-Dateieinträge, die innerhalb von *Case - oder *Default-Einträgen platziert werden können, werden als verlokatbare Einträge bezeichnet. Die folgenden Typen von GPD-Einträgen sind verlocatierbar:

  • Die meisten Druckerattribute, mit Ausnahme von Attributen auf Stammebene. (Allgemeine Attribute müssen EXTERN_GLOBAL vorangestellt werden, es sei denn, der *Switch-Eintrag befindet sich auf Stammebene - nicht innerhalb von Klammern.)

  • Geschachtelte *Switch-Einträge , mit denen Sie mehrere Abhängigkeiten angeben können.

  • *Befehlseinträge.

  • *TTFSEnabled?, das die Schriftartenersetzung ermöglicht.

Die folgenden Typen von GPD-Einträgen können nicht wiederverwendet werden:

  • Attribute auf Stammebene.

  • *TTFS-Einträge zum Angeben der ersetzten Schriftart.

  • *Einschränkungen, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints-Einträge, die ungültige Kombinationen von Optionen definieren, wie unter Optionseinschränkungen beschrieben.

  • *Feature- und *Option-Einträge (obwohl Featureattribute und Optionsattribute verlocatierbar sind).

Eine Methode zum Ermitteln, ob Einträge ordnungsgemäß in *Case-Anweisungen platziert wurden, ist das Entfernen aller *Switch - und *Case-Anweisungen . Wenn die Einträge in den *Case-Anweisungen richtig sind, sind sie auch nach dem Entfernen der *Switch - und *Case-Anweisungen richtig.

Reihenfolge von Switch-Anweisungen in einem V4-Drucktreiber, der von einem Klassentreiber abgeleitet ist

Die GPD-Datei des abgeleiteten v4-Druckertreibers muss die gleiche Reihenfolge wie der Basisklassentreiber aufweisen.

Stellen Sie sich folgendes Szenario vor: Sie verfügen über einen v4-Druckertreiber, der von einem v4-Klassentreiber abgeleitet wird, indem Sie RequiredClass auf den Klassentreiber in einer *-manifest.ini-Datei festlegen.

Die GPD-Datei des Klassentreibers weist die folgende Switchstruktur auf:

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

Der abgeleitete v4-Druckertreiber möchte den Switch MarginSetting hinzufügen, sodass die GPD-Datei die folgende Switchstruktur aufweist:

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

Beachten Sie, dass Die Auflösung vor InputBin in der abgeleiteten GPD und MarginSetting nach beiden festgelegt ist. Die GPD-Datei des abgeleiteten v4-Druckertreibers folgt der gleichen Reihenfolge wie die des Basisklassentreibers und fügt MarginSetting nach hinzu.

Eine falsch abgeleitete GPD-Datei kann beispielsweise wie folgt aussehen:

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