Пример 18

на сайте на Народ.Ру на Яндексе


Главная Назад Пример 1 Пример 2 Пример 3 Пример 4 Пример 5 Пример 6 Пример 7 Пример 8 Пример 9 Пример 10 Пример 11 Пример 12 Пример 13 Пример 14 Пример 15 Пример 16 Пример 17 Пример 18 Пример 19 Пример 20 Пример 21 Пример 22

Яndex

www.yandex.ru

Rambler's Top100

Рейтинг@Mail.ru

Последнее обновление 11/21/02.

 

Процедура, решающая очень актуальную при выводе отчетов на принтер задачу. Определяет границы недоступных для печати зон по краям листа.
Определение границ печати


'При написании процедуры печати столкнулся как-то я с проблемой:
'у любого принтера есть так называемые границы печати,т.е области 
'по краям , которые "лежат за границей досягаемости".
'Причем в зависимости от марки принтера и конкретной стороны листа значения
'колеблются в диапазоне от 4 до 13 мм. 
' Чтобы ваш отчет на разных принтерах выглядел одинаково,
'(в смысле размещения относительно краев листа),
'есть простой способ определить минимальные (собственные) поля принтера.
Private Const HORZSIZE = 4
Private Const VERTSIZE = 6
Private Const HORZRES = 8
Private Const VERTRES = 10
Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90
Private Const PHYSICALHEIGHT = 111
Private Const PHYSICALOFFSETX = 112
Private Const PHYSICALOFFSETY = 113
Private Const PHYSICALWIDTH = 110

Private Const DD As Single = 25.4
Private Const C_MARGIN = 1440 / DD
'точные значения  минимальных полей в мм из LoadInfo
Private Min_Margleft As Single
Private Min_MargUp As Single
Private Min_MargRigt As Single
Private Min_MargDown As Single
'получены из вашего диалога "page setup"(т.е. желаемые поля).
Private MM_Left As Long
Private MM_Rigt As Long
Private MM_Up As Long
Private MM_Down As Long

Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
    ByVal nIndex As Long) As Long
'**************************************************
Public Sub LoadInfo(nDC As Long)
Dim nDev As Long
Dim xOFSET, yOFSET, xWp, yHp, xDPI, _
    yDPI, xRES, yRES

nDev = nDC

xDPI = GetDeviceCaps(nDev, LOGPIXELSX) '600"X,Y Pixels/Logical Inch:"
yDPI = GetDeviceCaps(nDev, LOGPIXELSY) '600(разрешение)

xOFSET = GetDeviceCaps(nDev, PHYSICALOFFSETX) '130"Physical X/Y Margin"
yOFSET = GetDeviceCaps(nDev, PHYSICALOFFSETY) '150(отступы)

xWp = GetDeviceCaps(nDev, PHYSICALWIDTH) '4962
yHp = GetDeviceCaps(nDev, PHYSICALHEIGHT) '7014"Physical Height/Width"

xRES = GetDeviceCaps(nDev, HORZRES) '4676"X,Y Dimensions in pixels:"
yRES = GetDeviceCaps(nDev, VERTRES) '6744

'результат в миллиметрах
Min_Margleft = xOFSET / (xDPI / DD)
Min_MargUp = yOFSET / (yDPI / DD)
Min_MargRigt = (xWp - xOFSET - xRES) / (xDPI / DD)
Min_MargDown = (yHp - yOFSET - yRES) / (yDPI / DD)
'чтобы гарантировать "правильные" поля сами округлите ...
End Sub

'******************************************************
'как использовать-тo ?!

 LoadInfo Printer.hdc
 MarginLeft = 30 'в миллиметрах
 MarginRight = 10
 MarginTop = 20
 MarginBottom = 20 


'*******************************************************
Public Property Get MarginLeft() As Long
MarginLeft = MM_Left
End Property

'*******************************************************
Public Property Let MarginLeft(ByVal nMargin As Long)
'Dim newval As Single, mmval As Long
If nMargin < Min_Margleft Then
MM_Left = Min_Margleft
Else
MM_Left = nMargin
End If
m_MarginLeft = (MM_Left - Min_Margleft) * C_MARGIN
End Property
'для остальных полей аналогично!
' m_MarginLeft недостающее расстояние которое необходимо учесть
' в процедуре печати коих полно всяких разных ,потому здесь не привожу.
 
Найди на Бегуне:
Интернет-услуги и сервисы Интернет-услуги и сервисы
Компьютеры и оргтехника Компьютеры и оргтехника
Бытовая техника Бытовая техника
Связь Связь
Авто-мото Авто-мото
Книги, музыка и видео Книги, музыка и видео
Продаем целевых
посетителей!

Используются технологии uCoz