PrtDevMode 属性

expandtri全部显示

使用 PrtDevMode 属性可以设置或返回“打印”对话框中为窗体或报表指定的打印设备模式信息。Variant 型,可读写。

expression.PrtDevMode

expression     必需。返回“应用于”列表中的一个对象的表达式。

说明

如果需要有关 PrtDevModePrtDevNamesPrtMip 属性的完整文档,强烈建议您查阅 Win32 Software Development Kit。

PrtDevMode 属性设置是一个 94 字节的结构,反映了 Win32 Software Development Kit 中定义的 DEVMODE 结构。有关 PrtDevMode 属性成员的完整信息,请参阅 Win32 Software Development Kit。

PrtDevMode 属性使用以下成员:

成员

说明

DeviceName

最多为 32 字节的字符串,该字符串用于指定驱动程序所支持的设备名称。例如,如果 Hewlett-Packard LaserJet IIISi 是指定的打印机,则字符串为“HP LaserJet IIISi”。每个打印机驱动程序都有唯一的字符串。

SpecVersion

Integer 值,用于指定在 Win32 Software Development Kit 中 DEVMODE 结构的版本号。

DriverVersion

Integer 值,用于指定打印机驱动程序开发者指定的打印机驱动程序的版本号。

Size

Integer 值,用于指定 DEVMODE 结构的字节大小。(该值不包含在此结构之后的设备专用数据的可选 dmDriverData 成员)。如果应用程序只处理与驱动程序无关的部分数据,则可以使用该成员来求出此结构的长度,而不必考虑版本的不同。

DriverExtra

Integer 值,以字节为单位指定在此结构之后的设备专用数据的可选 dmDriverData 成员大小。如果应用程序不使用设备专用的信息,可将该成员设为 0。

Fields

Long 值,用于指定在 DEVMODE 结构中,哪些剩余的成员已经被初始化。

Orientation

Integer 值,用于指定纸张的打印方向。它可以是 1(纵向)或者 2(横向)。

PaperSize

Integer 值,用于指定打印纸张的大小。若将该成员设为 0 或 256,则纸张的长度和宽度分别由 PaperLength 和 PaperWidth 成员指定。否则,可以将 PaperSize 成员设为预定值。有关可用值的详细信息,请参阅 PaperSize 成员值

PaperLength

Integer 值,以 1/10 毫米为单位来指定纸张的长度。对于 PaperSize 成员为自定义纸张大小,或为可以使用各种纸张大小的点阵打印机等设备而指定的纸张长度,该成员会将其覆盖。

PaperWidth

Integer 值,以 1/10 毫米为单位来指定纸张宽度。该成员将覆盖 PaperSize 成员所指定的纸张宽度。

Scale

Integer 值,用于指定打印输出的缩放比例因子。页面大小外观是从实际页面大小按 Scale/100 的比例因子进行缩放而得到的。例如,一张 8.5×11 英寸(信纸大小)的纸缩放值为 50,则包含的数据大小与 17×22 英寸的纸张中数据一样,因为前者输出的文本和图形其高度和宽度都是原始值的一半。

Copies

Integer 值,如果打印设备支持多页副本,则用于指定打印份数。

DefaultSource

Integer 值,用于指定默认送纸盒。有关可用值的详细信息,请参阅 DefaultSource 成员值

PrintQuality

Integer 值,用于指定打印机的分辨率。取值可为 -4(高)、-3(中)、-2(低)和 -1(草稿)。

Color

Integer 值,用于指定彩色打印机的输出是否为彩色。取值可为 1(彩色)和 2(单色)。

Duplex

Integer 值,用于指定可双面打印的打印机是否进行双面打印。值为 1(单面)、2(水平)和 3(垂直)。

YResolution

Integer 值,以点/英寸 (dpi) 为单位指定打印机 y 轴方向的分辨率。如果打印机对该成员进行初始化,PrintQuality 成员指定的将是打印机的 x 轴方向分辨率的 dpi 值。

TTOption

Integer 值,用于指定如何打印 TrueType 字体。有关可用值的详细信息,请参阅 TTOption 成员值

Collate

Integer 值,在打印多个副本时,用于指定是否归类打印。使用不归类打印可提供更快、更有效的输出,因为数据只向打印机发送一次。

FormName

最大长度为 16 个字符的字符串,用于指定要使用的纸张大小,例如,“Letter”或“Legal”。

Pad

Long 值,用于为以后版本的需要而空出空白、字符或值。

Bits

Long 值,以位/像素为单位,指定显示设备的颜色分辨率。

PW

Long 值,以像素为单位,指定设备可视界面(屏幕或是打印机)的宽度。

PH

Long 值,以像素为单位,指定设备可视界面(屏幕或是打印机)的高度。

DFI

Long 值,用于指定设备的显示模式。

DFR

Long 值,以赫兹(每秒的周期数)为单位,指定显示设备在特定显示模式下的扫描频率。

 

注释  可以使用 Visual Basic 设置 PrtDevMode 属性。

该属性设置在“设计”视图中可读写,而在其他视图中则为只读。

注意  打印机驱动程序可以在 DEVMODE 结构之后添加 94 字节设备专用数据。因此上述的 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