使用 PrtDevMode 屬性可以設(shè)置或返回“打印”對(duì)話框中為窗體或報(bào)表指定的打印設(shè)備模式信息。Variant 型,可讀寫。
expression.PrtDevMode
expression 必需。返回“應(yīng)用于”列表中的一個(gè)對(duì)象的表達(dá)式。
如果需要有關(guān) PrtDevMode、PrtDevNames 和 PrtMip 屬性的完整文檔,強(qiáng)烈建議您查閱 Win32 Software Development Kit。
PrtDevMode 屬性設(shè)置是一個(gè) 94 字節(jié)的結(jié)構(gòu),反映了 Win32 Software Development Kit 中定義的 DEVMODE 結(jié)構(gòu)。有關(guān) PrtDevMode 屬性成員的完整信息,請(qǐng)參閱 Win32 Software Development Kit。
PrtDevMode 屬性使用以下成員:
成員 |
說明 |
DeviceName |
最多為 32 字節(jié)的字符串,該字符串用于指定驅(qū)動(dòng)程序所支持的設(shè)備名稱。例如,如果 Hewlett-Packard LaserJet IIISi 是指定的打印機(jī),則字符串為“HP LaserJet IIISi”。每個(gè)打印機(jī)驅(qū)動(dòng)程序都有唯一的字符串。 |
SpecVersion |
Integer 值,用于指定在 Win32 Software Development Kit 中 DEVMODE 結(jié)構(gòu)的版本號(hào)。 |
DriverVersion |
Integer 值,用于指定打印機(jī)驅(qū)動(dòng)程序開發(fā)者指定的打印機(jī)驅(qū)動(dòng)程序的版本號(hào)。 |
Size |
Integer 值,用于指定 DEVMODE 結(jié)構(gòu)的字節(jié)大小。(該值不包含在此結(jié)構(gòu)之后的設(shè)備專用數(shù)據(jù)的可選 dmDriverData 成員)。如果應(yīng)用程序只處理與驅(qū)動(dòng)程序無關(guān)的部分?jǐn)?shù)據(jù),則可以使用該成員來求出此結(jié)構(gòu)的長度,而不必考慮版本的不同。 |
DriverExtra |
Integer 值,以字節(jié)為單位指定在此結(jié)構(gòu)之后的設(shè)備專用數(shù)據(jù)的可選 dmDriverData 成員大小。如果應(yīng)用程序不使用設(shè)備專用的信息,可將該成員設(shè)為 0。 |
Fields |
Long 值,用于指定在 DEVMODE 結(jié)構(gòu)中,哪些剩余的成員已經(jīng)被初始化。 |
Orientation |
Integer 值,用于指定紙張的打印方向。它可以是 1(縱向)或者 2(橫向)。 |
PaperSize |
Integer 值,用于指定打印紙張的大小。若將該成員設(shè)為 0 或 256,則紙張的長度和寬度分別由 PaperLength 和 PaperWidth 成員指定。否則,可以將 PaperSize 成員設(shè)為預(yù)定值。有關(guān)可用值的詳細(xì)信息,請(qǐng)參閱 PaperSize 成員值。 |
Integer 值,以 1/10 毫米為單位來指定紙張的長度。對(duì)于 PaperSize 成員為自定義紙張大小,或?yàn)榭梢允褂酶鞣N紙張大小的點(diǎn)陣打印機(jī)等設(shè)備而指定的紙張長度,該成員會(huì)將其覆蓋。 |
|
PaperWidth |
Integer 值,以 1/10 毫米為單位來指定紙張寬度。該成員將覆蓋 PaperSize 成員所指定的紙張寬度。 |
Scale |
Integer 值,用于指定打印輸出的縮放比例因子。頁面大小外觀是從實(shí)際頁面大小按 Scale/100 的比例因子進(jìn)行縮放而得到的。例如,一張 8.5×11 英寸(信紙大小)的紙縮放值為 50,則包含的數(shù)據(jù)大小與 17×22 英寸的紙張中數(shù)據(jù)一樣,因?yàn)榍罢咻敵龅奈谋竞蛨D形其高度和寬度都是原始值的一半。 |
Copies |
Integer 值,如果打印設(shè)備支持多頁副本,則用于指定打印份數(shù)。 |
DefaultSource |
Integer 值,用于指定默認(rèn)送紙盒。有關(guān)可用值的詳細(xì)信息,請(qǐng)參閱 DefaultSource 成員值。 |
Integer 值,用于指定打印機(jī)的分辨率。取值可為 -4(高)、-3(中)、-2(低)和 -1(草稿)。 |
|
Color |
Integer 值,用于指定彩色打印機(jī)的輸出是否為彩色。取值可為 1(彩色)和 2(單色)。 |
Duplex |
Integer 值,用于指定可雙面打印的打印機(jī)是否進(jìn)行雙面打印。值為 1(單面)、2(水平)和 3(垂直)。 |
YResolution |
Integer 值,以點(diǎn)/英寸 (dpi) 為單位指定打印機(jī) y 軸方向的分辨率。如果打印機(jī)對(duì)該成員進(jìn)行初始化,PrintQuality 成員指定的將是打印機(jī)的 x 軸方向分辨率的 dpi 值。 |
TTOption |
Integer 值,用于指定如何打印 TrueType 字體。有關(guān)可用值的詳細(xì)信息,請(qǐng)參閱 TTOption 成員值。 |
Integer 值,在打印多個(gè)副本時(shí),用于指定是否歸類打印。使用不歸類打印可提供更快、更有效的輸出,因?yàn)閿?shù)據(jù)只向打印機(jī)發(fā)送一次。 |
|
FormName |
最大長度為 16 個(gè)字符的字符串,用于指定要使用的紙張大小,例如,“Letter”或“Legal”。 |
Pad |
Long 值,用于為以后版本的需要而空出空白、字符或值。 |
Bits |
Long 值,以位/像素為單位,指定顯示設(shè)備的顏色分辨率。 |
PW |
Long 值,以像素為單位,指定設(shè)備可視界面(屏幕或是打印機(jī))的寬度。 |
PH |
Long 值,以像素為單位,指定設(shè)備可視界面(屏幕或是打印機(jī))的高度。 |
DFI |
Long 值,用于指定設(shè)備的顯示模式。 |
DFR |
Long 值,以赫茲(每秒的周期數(shù))為單位,指定顯示設(shè)備在特定顯示模式下的掃描頻率。 |
注釋 可以使用 Visual Basic 設(shè)置 PrtDevMode 屬性。
該屬性設(shè)置在“設(shè)計(jì)”視圖中可讀寫,而在其他視圖中則為只讀。
注意 打印機(jī)驅(qū)動(dòng)程序可以在 DEVMODE 結(jié)構(gòu)之后添加 94 字節(jié)設(shè)備專用數(shù)據(jù)。因此上述的 DEVMODE 數(shù)據(jù)不要超過 94 個(gè)字節(jié),這一點(diǎn)很重要。
只有導(dǎo)出 ExtDeviceMode 函數(shù)的打印機(jī)驅(qū)動(dòng)程序使用 DEVMODE 結(jié)構(gòu)。
應(yīng)用程序可以使用 DC_PAPERS、DC_PAPERSIZE 及 DC_PAPERNAMES 值調(diào)用 DeviceCapabilities 函數(shù),以檢索打印機(jī)支持的紙張大小和名稱。
在設(shè)置 TTOption 的成員值之前,應(yīng)用程序應(yīng)該使用 DC_TRUETYPE 值調(diào)用 DeviceCapabilities 函數(shù),以找出打印機(jī)驅(qū)動(dòng)程序使用 TrueType 字體的方法。
下面的示例使用 PrtDevMode 屬性來檢查用戶定義的報(bào)表頁面大小。
Private Type str_DEVMODE
RGB As String * 94
End Type
Private Type type_DEVMODE
strDeviceName As String * 32
intSpecVersion As Integer
intDriverVersion As Integer
intSize As Integer
intDriverExtra As Integer
lngFields As Long
intOrientation As Integer
intPaperSize As Integer
intPaperLength As Integer
intPaperWidth As Integer
intScale As Integer
intCopies As Integer
intDefaultSource As Integer
intPrintQuality As Integer
intColor As Integer
intDuplex As Integer
intResolution As Integer
intTTOption As Integer
intCollate As Integer
strFormName As String * 32
lngPad As Long
lngBits As Long
lngPW As Long
lngPH As Long
lngDFI As Long
lngDFr As Long
End Type
Public Sub CheckCustomPage(ByVal rptName As String)
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
Dim intResponse As Integer
' Opens report in Design view.
DoCmd.OpenReport rptName, acDesign
Set rpt = Reports(rptName)
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
' Gets current DEVMODE structure.
DevString.RGB = strDevModeExtra
LSet DM = DevString
If DM.intPaperSize = 256 Then
' Display user-defined size.
intResponse = MsgBox("The current custom page size is " & _
DM.intPaperWidth / 254 & " inches wide by " & _
DM.intPaperLength / 254 & " inches long. Do you want " & _
"to change the settings?", vbYesNo + vbQuestion)
Else
' Currently not user-defined.
intResponse = MsgBox("The report does not have a custom page size. " & _
"Do you want to define one?", vbYesNo + vbQuestion)
End If
If intResponse = vbYes Then
' User wants to change settings. Initialize fields.
DM.lngFields = DM.lngFields Or DM.intPaperSize Or _
DM.intPaperLength Or DM.intPaperWidth
' Set custom page.
DM.intPaperSize = 256
' Prompt for length and width.
DM.intPaperLength = InputBox("Please enter page length in inches.") * 254
DM.intPaperWidth = InputBox("Please enter page width in inches.") * 254
' Update property.
LSet DevString = DM
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
End If
End If
Set rpt = Nothing
End Sub
下面的示例顯示如何更改報(bào)表的打印方向。該示例將打印方向從縱向切換到橫向,或是從橫向切換到縱向,這取決于報(bào)表當(dāng)前的打印方向。
Public Sub SwitchOrient(ByVal strName As String)
Const DM_PORTRAIT = 1
Const DM_LANDSCAPE = 2
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
' Opens report in Design view.
DoCmd.OpenReport strName, acDesign
Set rpt = Reports(strName)
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
DM.lngFields = DM.lngFields Or DM.intOrientation
' Initialize fields.
If DM.intOrientation = DM_PORTRAIT Then
DM.intOrientation = DM_LANDSCAPE
Else
DM.intOrientation = DM_PORTRAIT
End If
' Update property.
LSet DevString = DM
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
End If
Set rpt = Nothing
End Sub