Определение границ печати
'При написании процедуры печати столкнулся как-то я с проблемой: 'у любого принтера есть так называемые границы печати,т.е области 'по краям , которые "лежат за границей досягаемости". 'Причем в зависимости от марки принтера и конкретной стороны листа значения 'колеблются в диапазоне от 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'для остальных полей аналогично! ' m_MarginLeft недостающее расстояние которое необходимо учесть ' в процедуре печати коих полно всяких разных ,потому здесь не привожу.