Resumen Margenes en el objeto Printer

Pablo:

Si lo que quieres es manejar el punto de impresión utiliza las propiedades de
Printer: CurrentX y CurrentY. Pero si lo que quieres es obtener lo márgenes mínimos o predeterminados de la impresora por defecto (para calcular el tamaño del area imprimible) tienes dos posibilidades:

1.-Con objeto Printer

'Márgen predeterminado superior en twips (1 cm = 566'9 twips)
Public Function TopOffset() As Long
    TopOffset = (Printer.Height - Printer.ScaleHeight)
End Function

'Margen predeterminado izquierdo en twips
Public Function LeftOffset()
    LeftOffset = (Printer.Width - Printer.ScaleWidth)
End Function

'Los margenes derecho= izquierdo, inferior=superior

2.- Mediante API

'*****************Declaraciones de Módulo*****************************
Declare Function GetDeviceCaps Lib "gdi32" _
    (ByVal hDC As Long, ByVal nIndex As Long) As Long

'Margen X del área física imprimible
Const PHYSICALOFFSETX As Long = 112
'Margen Y del área física imprimible
Const PHYSICALOFFSETY As Long = 113

'*****************Function o Sub******************************************
    Dim LeftOffset As Long, TopOffset As Long

    ' Iniciar un trabajo de impresión para obtener un Printer.hDC) valido
    Printer.Print Space(1)
    Printer.ScaleMode = vbTwips

    ' Obtener el desplazamiento del area imprimible de la página en twips
    LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hDC, _
        PHYSICALOFFSETX), vbPixels, vbTwips)
    TopOffset = Printer.ScaleY(GetDeviceCaps(Printer.hDC, _
        PHYSICALOFFSETY), vbPixels, vbTwips)


Para ajustar exactamente la etiqueta, debes calcularla a partir de los márgenes predeterminados y despues usar CurrentX y CurrentY, sabiendo :

1.- que éstas comienzan en 0 a partir de las cifras dadas por dichos márgenes,
es decir, si el márgen izquierdo predeterminado es 280 twips, ese punto coincide con Printer.CurrentX=0.

2.- que CurrentX debe especificarse por cada línea de texto

3.- que la longitud de cada línea se puede calcular con :
Printer.TextWidth(sCadTrabajo) y cortandola con salto de carro vbCrLf si es necesario. Y la altura se calcula con Printer.TextHeight("A"). Las cifras resultantes se refieren a la fuente y tamaño seleccionadas con Printer.Font.Name y Printer.Font.Size.

4.- que es mejor ajustar distancias de margenes y separaciones de etiquetas con espacios que con tabuladores. La longitud de un espacio se calcula con Printer.TextWidth(" "). El número de espacios necesarios para obtener un margen o una separación será: LongitudDeseada/ Printer.TextWidth(" ")

5.- que aunque el salto de línea se hace automaticamente con vbCrLf con un promedio de la altura de la fuente, también se debe especificar CurrentY por línea en caso de que quieras distancias verticales especiales.

Saludos.

Santiago Jimeno (Madrid)
SJIMENOH28@smail1.ocenf.org



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com