Применение
Объект Form |
Объект Report |
Свойство PrtDevMode служит для задания или возврата сведений о режиме устройства печати, указанных для формы или отчета в диалоговом окне Печать. Значение данного свойства типа Variant доступно для чтения и записи.
выражение.PrtDevMode
Выражение Обязательный. Выражение, возвращающее один из объектов в списке Применяется к.
Примечания
Настоятельно рекомендуется обратиться к пакету средств разработки Win32 для получения полной документации по свойствам PrtDevMode, PrtDevNames и PrtMip.
Значение свойства PrtDevMode представляет собой 94-байтовую структуру, которая отражает структуру DEVMODE, определенную в пакете средств разработки Win32. Исчерпывающие сведения об элементах свойства PrtDevMode можно найти в пакете средств разработки Win32.
В свойстве PrtDevMode используются следующие члены.
Член |
Описание |
DeviceName |
Значение типа строка с максимальным размером 32 байта, которое определяет имя устройства, поддерживаемого драйвером, например "HP LaserJet IIISi", если указанным принтером является Hewlett-Packard LaserJet IIISi. Каждый драйвер принтера имеет уникальную строку. |
SpecVersion |
Значение типа Integer, определяющее номер версии структуры DEVMODE в пакете средств разработки Win32. |
DriverVersion |
Значение типа Integer, определяющее версию драйвера принтера, назначенную разработчиком драйвера принтера. |
Size |
Значение типа Integer, определяющее размер структуры DEVMODE в байтах. (Это значение не включает дополнительный член dmDriverData для данных конкретного устройства, которые могут следовать за этой структурой.) Если приложение обрабатывает только независимую от драйвера часть данных, этот член можно использовать для нахождения длины данной структуры без необходимости учета разных версий. |
DriverExtra |
Значение типа Integer, определяющее размер в байтах дополнительного члена dmDriverData для данных конкретного устройства, которые могут следовать за данной структурой. Если приложение не использует сведения, являющиеся специфическими для устройства, можно задать для этого члена значение 0. |
Fields |
Значение типа Long, которое определяет, какие из остальных членов структуры DEVMODE инициализированы. |
Orientation |
Значение типа Integer, определяющее ориентацию бумаги. Может быть равно либо 1 (книжная), либо 2 (альбомная). |
PaperSize |
Значение типа Integer, определяющее размер бумаги для печати. Если задать для этого члена значение 0 или 256, длина и ширина бумаги будут определяться соответственно членами PaperLength и PaperWidth. В противном случае можно задать для члена PaperSize заранее определенное значение. |
PaperLength |
Значение типа Integer, определяющее длину бумаги в единицах, равных 1/10 миллиметра. Этот член переопределяет длину бумаги, заданную членом PaperSize, для пользовательских размеров бумаги или для устройств, которые могут печатать на бумаге разного размера, например матричных принтеров. |
PaperWidth |
Значение типа Integer, определяющее ширину бумаги в единицах, равных 1/10 миллиметра. Этот член переопределяет ширину бумаги, заданную компонентом PaperSize. |
Scale |
Значение типа Integer, определяющее коэффициент масштабирования для результата печати. Видимый размер страницы изменяется по сравнению с физическим размером страницы путем умножения на коэффициент, равный значению Scale, деленному на 100. Например, бумага размером 215,9 х 279,4 мм (размер Letter) при значении Scale 50 будет содержать столько данных, сколько страница размером 431,8 х 558,8 мм, поскольку текст и рисунки при печати будут в два раза меньше их исходной длины и ширины. |
Copies |
Значение типа Integer, которое определяет количество копий, печатаемых устройством, если оно поддерживает копии, включающие несколько страниц. |
DefaultSource |
Значение типа Integer, определяющее лоток по умолчанию, из которого подается бумага. |
PrintQuality |
Значение типа Integer, определяющее разрешение принтера. Возможны следующие значения: –4 (высокое), –3 (среднее), –2 (низкое) и –1 (черновик). |
Color |
Значение типа Integer. Для цветных принтеров определяет необходимость печати в цвете. Возможные значения: 1 (цветная печать) и 2 (черно-белая печать). |
Duplex |
Значение типа Integer. Для принтера с возможностью двусторонней печати указывает, будут ли данные напечатаны на обеих сторонах бумаги. Возможные значения: 1 (односторонняя), 2 (горизонтальная) и 3 (вертикальная). |
YResolution |
Значение типа Integer, определяющее вертикальное разрешение принтера в точках на дюйм. Если принтер инициализирует этот член, член PrintQuality задает горизонтальное разрешение принтера в точках на дюйм. |
TTOption |
Значение типа Integer, определяющее способы печати шрифтов TrueType. |
Collate |
Значение типа Integer, определяющее, будет ли использоваться сортировка при печати нескольких копий. Использование несортированных копий ускоряет печать и повышает производительность принтера, так как данные отправляются на принтер только один раз. |
FormName |
Строка длиной не более 16 знаков, определяющая размер используемой бумаги, например "Letter" или "Legal". |
Pad |
Значение типа Long, используемое для заполнения пробелами, знаками или значениями для будущих версий. |
Bits |
Значение типа Long, определяющее цветовое разрешение дисплея в битах на пиксель. |
PW |
Значение типа Long, определяющее ширину видимой поверхности устройства (экрана или принтера) в пикселях. |
PH |
Значение типа Long, определяющее высоту видимой поверхности устройства (экрана или принтера) в пикселях. |
DFI |
Значение типа Long, определяющее режим отображения устройства. |
DFR |
Значение типа Long, определяющее частоту в герцах (периодах в секунду) устройства отображения в конкретном режиме. |
Примечание: Свойство PrtDevMode можно задать с помощью кода Visual Basic для приложений (VBA).
Значение этого свойства доступно для чтения и записи в режимах конструктора и макета. В других режимах оно доступно только для чтения.
Драйверы принтера могут добавлять данные конкретного устройства сразу после 94 байтов структуры DEVMODE. Поэтому важно, чтобы размер упомянутых выше данных DEVMODE не превышал 94 байта.
Структуру DEVMODE используют только драйверы принтера, экспортирующие функцию ExtDeviceMode.
Приложение может извлекать размеры и наименования бумаги, поддерживаемые принтером, с помощью значений DC_PAPERS, DC_PAPERSIZE и DC_PAPERNAMES для вызова функции DeviceCapabilities.
Прежде чем задать значение члена TTOption, приложения должны определить, как драйвер принтера может использовать шрифты TrueType, с помощью значения DC_TRUETYPE для вызова функции DeviceCapabilities.
Пример
В приведенном ниже примере свойство 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