Неречатамая область принтера

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Неречатамая область принтера

Сообщение Emzari » 30.06.2005 (Чт) 11:56

Как определить непечатаемую область принтера?

JohnCR
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 14.06.2005 (Вт) 19:03

Сообщение JohnCR » 30.06.2005 (Чт) 12:03

Что такое "непечатаемая область прнтера"?

Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Сообщение Emzari » 30.06.2005 (Чт) 12:19

Непечататаемая облпсть ета область на странице блже к краям где принтер не может печатать. например у меня стоит HP LaserJet 1100 и при печати он оставляет вокруг страницы пустое поле размером 7 мм.

JohnCR
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 14.06.2005 (Вт) 19:03

Сообщение JohnCR » 30.06.2005 (Чт) 12:41

Посмотри пример, может, поможет.
Вложения
prn1.rar
Свойства страницы и принтера
(2.79 Кб) Скачиваний: 90

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 30.06.2005 (Чт) 18:39

Если правильно помню енто делаеца так:
Код: Выделить всё
offsetX = GetDeviceCaps(hPrinterDC, PHYSICALOFFSETX) 'in dots
offsetY = GetDeviceCaps(hPrinterDC, PHYSICALOFFSETY) 'in dots
Invalid user or password...

Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Сообщение Emzari » 01.07.2005 (Пт) 12:14

спасибо Arcanoid все вышло вот так:
Private Declare Function GetDeviceCaps Lib "gdi32" ( _
ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Const PHYSICALOFFSETX = 112
Private Const PHYSICALOFFSETY = 113

Private Sub Form_Load()
Printer.PaperSize = vbPRPSA4
Dim lngX As Long, lngY As Long
lngX = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETX)
lngY = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETY)
Label1.Caption = "Offset_X = " & lngX
Label2.Caption = "Offset_Y = " & lngY
End Sub

А как перевести возврашаемые значения в миллиметры

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 01.07.2005 (Пт) 13:25

Эх и озадачил ты меня, Emzari!

Общий подход такой:
1) Получаем типоразмер (формат (или как он там называется :D )) бумаги. Его можно достать из DEVMODE::dmPaperSize, он же вроде лежит и в Printer.PaperSize, так что с DEVMODE даже и связываться не надо.
2) Получаем размеры бумаги (paper_width и paper_height) по её формату (см. МСДН, описание DEVMODE, dmPaperSize).
3)
offsetX = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETX) 'отступ в девайс'юнитах
offsetX_mm = offsetX * paper_width / GetDeviceCaps(Printer.hDC, PHYSICALWIDTH) 'отступ в мм
offsetY = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETY)
offsetY_mm = offsetY * paper_height / GetDeviceCaps(Printer.hDC, PHYSICALHEIGHT)

Ну вот вроде и всё..

Только наверно придётся написать свою функцию перевода формата бумаги в её мм-размеры (если, конечно, нужна поддержка разных форматов)
Invalid user or password...

HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

Printer margins

Сообщение HiMik2003 » 01.07.2005 (Пт) 13:52

А я такой класс использую:


Код: Выделить всё
Option Explicit

' Все значения возвращаются в пикселях!
'
Private Declare Function GetDeviceCaps Lib "gdi32" _
       (ByVal hdc As Long, ByVal nIndex As Long) As Long

      ' Constants for nIndex argument of GetDeviceCaps
      Private Const HORZRES = 8
      Private Const VERTRES = 10
      Private Const LOGPIXELSX = 88
      Private Const LOGPIXELSY = 90
      Private Const PHYSICALWIDTH = 110
      Private Const PHYSICALHEIGHT = 111
      Private Const PHYSICALOFFSETX = 112
      Private Const PHYSICALOFFSETY = 113


Public Property Get LeftMargin() As Integer
    LeftMargin = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETX)
End Property

Public Property Get TopMargin() As Integer
    TopMargin = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETY)
End Property

Public Property Get PhysWidth() As Integer
    PhysWidth = GetDeviceCaps(Printer.hdc, PHYSICALWIDTH)
End Property

Public Property Get PhysHeight() As Integer
    PhysHeight = GetDeviceCaps(Printer.hdc, PHYSICALHEIGHT)
End Property

Public Property Get PrintAreaHorz() As Integer
    PrintAreaHorz = GetDeviceCaps(Printer.hdc, HORZRES)
End Property

Public Property Get PrintAreaVert() As Integer
    PrintAreaVert = GetDeviceCaps(Printer.hdc, VERTRES)
End Property



Public Property Get RightMargin() As Integer
    RightMargin = PhysWidth - PrintAreaHorz - LeftMargin
End Property

Public Property Get BottomMargin() As Integer
    BottomMargin = PhysHeight - PrintAreaVert - TopMargin
End Property

Public Property Get dpiX() As Integer
    dpiX = GetDeviceCaps(Printer.hdc, LOGPIXELSX)
End Property
Public Property Get dpiY() As Integer
    dpiY = GetDeviceCaps(Printer.hdc, LOGPIXELSY)
End Property

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 01.07.2005 (Пт) 14:49

Точно! Есть ведь ещё LOGPIXELSX!

Ну тогда всё проще:
Код: Выделить всё
offsetX_mm = 25.4 * GetDeviceCaps(hDC, PHYSICALOFFSETX) / GetDeviceCaps(hDC, LOGPIXELSX)
offsetY_mm = 25.4 * GetDeviceCaps(hDC, PHYSICALOFFSETY) / GetDeviceCaps(hDC, LOGPIXELSY)


Поправьте если чё напутал :wink:
Invalid user or password...

Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Сообщение Emzari » 06.07.2005 (Ср) 10:22

Спасибо всем очен помогли!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 134

    TopList