Dela via


Villkorsstyrda instruktioner

Viktigt!

Den moderna utskriftsplattformen är Windows bästa sätt att kommunicera med skrivare. Vi rekommenderar att du använder Microsofts IPP-drivrutin för inkorgsklass tillsammans med Print Support Apps (PSA) för att anpassa utskriftsupplevelsen i Windows 10 och 11 för enhetsutveckling av skrivare.

Mer information finns i designguiden för utskriftssupportapp v1 och v2.

GPD-språket innehåller C-liknande villkorssatser som gör att du kan beskriva beroenden som vissa skrivarattribut kan ha på en skrivarkonfiguration. Marginalerna och markörens ursprung för en sida kan till exempel bero på sidans orientering. Med *Switch - och *Case-uttryck kan du uttrycka sådana beroenden. Formatet för dessa instruktioner är följande:

*Växla FeatureName { *Case Option1_Name { } * *Case Option2_Name { } osv. *Case OptionN_Name { } *Default { } }

FeatureName måste vara namnet på en feature som anges i GPD-filen med en *Feature-post. De alternativnamn som används måste vara alternativ som är associerade med den angivna funktionen.

För att uttrycka i vilket fall sidmarginaler och markörens ursprung är beroende av sidans orientering kan följande poster användas:

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

I det här exemplet är alternativen för skrivarens PaperSize-funktion beroende av det valda alternativet för skrivarens orienteringsfunktion .

Om du inte listar alla alternativ för en funktion som *Argument för case-instruktion kan du inkludera en *Standard-instruktion , precis som på C-språket. Om du inte inkluderar alla alternativ och inte inkluderar en *Standard-instruktion måste du utvärdera relevanta attribut (i exemplet *PrintableArea, *PrintableOrigin och *CursorOrigin) någon annanstans i GPD-filen, före instruktionen *Switch .

Ange flera beroenden

Du kan inkludera *Switch-instruktioner inuti *Case och *Default-instruktioner. På så sätt kan du ange flera beroenden enligt följande:

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

I det här exemplet är AttributeX, som tillhör optionE för feature3, beroende av både feature1 och feature2.

Om användaren har valt alternativA för feature1, optionD för feature2 och optionE för feature3, ställs attributeX in på ValueX.

Om användaren har valt optionA för feature1, optionC för feature2 och optionE för feature3 anges attributeX till ValueY.

Om användaren har valt optionB för feature1 och optionE för feature3 anges attributeX till ValueZ. Inställningen för Feature2 är irrelevant.

Följande regler gäller när du anger flera beroenden:

  • Flera beroenden måste anges inom en enda *Switch-post. Med hjälp av exemplet kan du till exempel inte använda en *Switch-post för att ange att feature3 är beroende av feature1 och sedan i en efterföljande icke-kapslad *Switch-instruktion ange att feature3 är beroende av feature2.

  • Du kan inte ange samma funktion mer än en gång inom varje kapslad *Växla post.

Var du ska placera en *Switch-sats

Du kan placera en *Switch-instruktion på följande platser i en GPD-fil:

  • Inuti en *Alternativ-instruktion

  • Inuti ett *-funktionsuttalande

  • Inuti en *Case-sats

  • Inuti ett *standard-uttryck

  • På filens översta nivå (alltså inte inom en uppsättning klammerparenteser)

Vad du bör placera i *Switch-, *Case- och *Default-uttryck

Inom en *Switch-posten kan du bara placera *Case-poster och *Default-poster.

Poster i GPD-filer som kan placeras i *Case eller *Default poster kallas för flyttbara poster. Följande typer av GPD-poster kan flyttas:

  • De flesta skrivarattribut, förutom attribut som endast finns på rotnivå. (Allmänna attribut måste föregås av EXTERN_GLOBAL, såvida inte *Switch-posten är på rotnivå – alltså inte inom klammerparenteser.)

  • Kapslade *Växla poster, vilket gör att du kan ange flera beroenden.

  • *Kommandoinmatningar.

  • *TTFSEnabled?, vilket möjliggör teckensnittsersättning.

Följande typer av GPD-poster kan inte flyttas:

  • Attribut som endast gäller för rotnivå.

  • *TTFS-poster för att ange substituerat teckensnitt.

  • *Constraints, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints-poster som definierar ogiltiga kombinationer av alternativ, enligt beskrivningen i Alternativbegränsningar.

  • *Funktions- och *Alternativposter (även om funktionsattribut och alternativattribut kan flyttas).

En metod för att avgöra om poster har placerats korrekt i *Case-satser är att ta bort alla *Switch- och *Case-satser. Om posterna i *Case-satsen är korrekta, är de fortfarande korrekta efter att *Switch- och *Case-satserna har tagits bort.

Ordning av switch-instruktioner i en V4-utskriftsdrivrutin som härleds från en klassdrivrutin

Den härledda v4-skrivardrivrutinens GPD-fil måste följa samma ordning som basklassdrivrutinen.

Tänk på följande scenario. Du har en v4-skrivardrivrutin som härleds från en v4-klassdrivrutin genom att ange RequiredClass till klassdrivrutinen i en *-manifest.ini-fil.

Klassdrivrutinens GPD-fil har följande växelträd:

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

Den härledda v4-skrivardrivrutinen vill lägga till MarginSetting-växeln , så att dess GPD-fil har följande växelträd:

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

Observera att Upplösning anges innan InputBin i härledd GPD och MarginSetting anges efter båda. Den härledda v4-skrivardrivrutinens GPD-fil följer samma ordning som basklassdrivrutinens och lägger till MarginSetting efter.

En felaktigt härledd GPD-fil kan till exempel se ut så här:

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