PrtDevMode 属性

应用对象
Microsoft 365 专属 Access Access 2021 Access 2019 Access 2016

适用于

Form 对象
Report 对象

可在“打印”对话框中使用 PrtDevMode 属性,设置或返回为表单或报表指定的打印设备模式信息。 读取/写入变量

表达式.PrtDevMode

表达 必填。 返回“适用范围”列表中的对象之一的表达式。

备注

强烈建议查看 Win32 软件开发工具包,获取有关 PrtDevModePrtDevNamesPrtMip 属性的完整文档。

PrtDevMode 属性设置是一种 94 字节结构,是 Win32 软件开发工具包中定义的 DEVMODE 结构的镜像。 有关 PrtDevMode 属性成员的完整信息,请查阅 Win32 软件开发工具包。

PrtDevMode 属性使用以下成员。

成员 说明
DeviceName 一个最多包含 32 个字节的字符串,指定驱动程序支持的设备的名称,例如,如果 Hewlett-Packard LaserJet IIISi 是指定的打印机,则为“HP LaserJet IIISi”。 每个打印机驱动程序都有一个唯一的字符串。
SpecVersion 一个整数,指定 Win32 软件开发工具包中的 DEVMODE 结构的版本号。
DriverVersion 一个整数,指定打印机驱动程序开发人员分配的打印机驱动程序版本号。
Size 一个整数,指定 DEVMODE 结构的大小(以字节为单位)。 (此值不包括特定于设备的数据的可选 dmDriverData 成员,该成员可以遵循此结构。) 如果应用程序仅操作与驱动程序无关的数据部分,则可以使用此成员来查找此结构的长度,而无需考虑不同的版本。
DriverExtra 一个整数,指定特定于设备的数据的可选 dmDriverData 成员的大小(以字节为单位),该成员可能采用此结构。 如果应用程序不使用特定于设备的信息,将该成员设置为 0。
Fields 一个长值,指定 DEVMODE 结构剩余成员中已初始化的成员。
Orientation 一个整数,指定纸张的打印方向。 可以是 1(纵向)或 2(横向)。
PaperSize 一个整数,指定要打印的纸张的大小。 如果将此成员设置为 0 或 256,则成员 PaperLength 和 PaperWidth 分别指定纸张长度和宽度。 否则,请将成员 PaperSize member 设置为预定义值。
PaperLength 一个整数,指定纸张长度(以毫米的 1/10 为单位)。 该成员替代针对自定义纸张大小或可在多种大小纸张上打印的设备(如点阵打印机)的 PaperSize 成员指定的纸张长度。
PaperWidth 一个整数,指定纸张宽度(以毫米的 1/10 为单位)。 此成员替代由 PaperSize 成员指定的纸张宽度。
Scale 一个整数,指定打印输出的缩放系数。 外观页面大小在实际页面大小的基础上,以 /100 缩放系数进行缩放。 例如,尺寸为 8.5 x 11 英寸(信纸大小)的一张纸(缩放值为 50)可包含与尺寸为 17 x 22 英寸的纸张同样多的数据,因为输出文本和图形是原始高度和宽度的一半。
Copies 一个整数,指定打印副本份数(若打印设备支持多页副本)。
DefaultSource 一个整数,指定进纸的默认纸槽。
PrintQuality 一个整数,指定打印机分辨率。 值为 4(高)、3(中)、2(低)和 1(草稿)。
Color 一个整数。 对于彩色打印机,指定输出是否打印为彩色。 值为 1(彩色)和 2(单色)。
Duplex 一个整数。 对于具有双面打印功能的打印机,指定输出是否打印在纸张的两面。 值为 1(单面)、2(水平)和 3(垂直)。
YResolution 一个整数,指定以每英寸点数 (dpi) 表示的打印机 y 分辨率。 如果打印机初始化此成员,PrintQuality 成员指定以 dpi 表示的打印机 x 分辨率。
TTOption 一个整数,指定 TrueType 字体的打印方式。
Collate 一个整数,指定打印多份副本时是否应使用排序规则。 使用无排序规则的副本可提供更快、更高效的输出,因为数据仅发送到打印机一次。
FormName 最大长度为 16 个字符的字符串,指定要使用的纸张大小,例如“Letter”或“Legal”。
Pad 一个值,用于填充将来版本的空格、字符或值。
Bits 一个值,指定以每像素位数表示的显示设备颜色分辨率。
PW 一个值,指定可见设备表面(屏幕或打印机)的宽度,以像素为单位。
PH 一个值,指定可见设备表面(屏幕或打印机)的高度,以像素为单位。
DFI 一个值,指定设备的显示模式。
DFR 一个值,指定显示设备在特定模式下的频率,以赫兹(每秒周期数)为单位。

      

注意

可使用 Visual Basic for Applications (VBA) 代码设置 PrtDevMode 属性。

此属性设置在设计视图或布局视图中为读/写,在其他视图中为只读。

打印机驱动程序可立即添加特定于设备的数据,数据采用 94 字节的 DEVMODE 结构。 因此,请确保上述 DEVMODE 数据不超过 94 字节。

仅导出 ExtDeviceMode 函数的打印机驱动程序使用 DEVMODE 结构。

应用程序可使用 DC_PAPERS、DC_PAPERSIZE 和 DC_PAPERNAMES 值来调用 DeviceCapabilities 函数,检索打印机支持的纸张大小和名称。

在设置 TTOption 成员值之前,应用程序应通过使用 DC_TRUETYPE 值调用 DeviceCapabilities 函数,了解打印机驱动程序使用 TrueType 字体的方式。

示例

下面的示例使用 PrtDevMode 属性来查看报表的用户定义页面大小:

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

下面的示例演示如何更改报表的打印方向。 此示例将打印方向从纵向切换为横向,或从横向切换为纵向,具体取决于报表的当前打印方向。

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