條件陳述式
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
GPD 語言提供類似 C 的條件語句,可讓您描述某些印表機屬性在列印機組態上可以擁有的相依性。 例如,頁面的邊界和游標原點可能取決於頁面的方向。 *Switch 和 *Case 語句可讓您表達這類相依性。 這些語句格式如下:
*Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } etc. *Case OptionN_Name { } *Default { } }
FeatureName 必須是具有 *功能專案之 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 語句自變數,您可以包含 *Default 語句,就像 C 語言一樣。 如果您未包含所有選項,而且不包含 *Default 語句,則必須評估 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 的設定無關緊要。
指定多個相依性時,適用下列規則:
必須在單 一 *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 專案類型是可重新放置的:
大部分印表機屬性,但根層級專用屬性除外。 (一般屬性 前面必須加上 EXTERN_GLOBAL,除非 *Switch 項目位於根層級 ,而不是大括弧內。
巢狀 *Switch 專案,可讓您指定多個相依性。
*命令專案。
*TTFSEnabled?,可啟用字型替代。
下列 GPD 專案類型無法重新放置:
僅限根層級的屬性。
*指定替代字型的 TTFS 專案。
*條件約束、*InvalidCombination、*InvalidInstallableCombination、*NotInstalledConstraints 專案,定義無效的選項組合,如選項條件約束中所述。
判斷專案是否已正確放置在 *Case 語句內的其中一個方法是移除所有 *Switch 和 *Case 語句。 如果 *Case 語句內的項目正確,在移除 *Switch 和 *Case 語句之後,它們仍然正確。
V4 列印驅動程式中衍生自類別驅動程式的 switch 語句排序
衍生 v4 印表機驅動程式的 GPD 檔案必須遵循與基類驅動程式相同的順序。
請參考下列案例。 您有 v4 印表機驅動程式,其衍生自 v4 類別驅動程式,方法是將 RequiredClass 設定為 *-manifest.ini 檔案中的類別驅動程式。
類別驅動程式的 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 設定兩者之後,都會設定 Resolution。 衍生的 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