|
PrtDevMode 属性
参阅应用于示例特性使用 PrtDevMode 属性可以设置或返回“打印”对话框中为窗体或报表指定的打印设备模式信息。Variant 型,可读写。
expression.PrtDevMode
expression 必需。返回“应用于”列表中的一个对象的表达式。
说明
如果需要有关 PrtDevMode、PrtDevNames 和 PrtMip 属性的完整文档,强烈建议您查阅 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 |
|