Autor Tema: [help] Maldito objeto PRINTER!!! (duda con margenes)  (Leído 4556 veces)

0 Usuarios y 1 Visitante están viendo este tema.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
[help] Maldito objeto PRINTER!!! (duda con margenes)
« en: Julio 01, 2010, 07:40:02 pm »
Estoy intentando usar el objeto Printer para imprimir unos bordes a full resolucion de la hoja, pero me esta persiguiendo la desgracia: para empezar, con .CurrentX = 0; .CurrentY = 0 me arranca con algun margen que yo no configure en ningun lado. Segundo, si hago un cuadrado con .Line y le paso valores para que quede como borde, me recorta las lineas un pedazo.


Pero, estuve un rato viendo los margenes a mano, y pude deducir donde hace el corte, y logre que se vea la linea:


pero igualmente, porque tengo tan poco espacio hacia abajo?

Estoy usando una impresora virtual (de windows) y guardo los archivos en formato PostScript y con GSview los puedo ver. (Aclaro que el problema no viene de aca, porque ya probe varios programas que imprimen y quedan = que en la vida real).

el codigo que use es el siguiente:
Código: (vb) [Seleccionar]
Private Sub Command1_Click()
    Dim lngMarginErrorX As Long

    With Printer
        .PaperSize = vbPRPSA4
        .Orientation = vbPRORPortrait
       
        Printer.Print ""
        .CurrentX = 0
        .CurrentY = 0
        .ForeColor = vbBlack
       
       
        lngMarginErrorX = 1015
       
        Printer.Line (150, 0)-(.Width - lngMarginErrorX, .Height - 1440), vbBlack, B '150 y 1440 son correcciones
       
        .EndDoc
    End With
End Sub

saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:[help] Maldito objeto PRINTER!!! (duda con margenes)
« Respuesta #1 en: Julio 02, 2010, 07:32:08 am »
hola Coco yo probe con esto

Código: [Seleccionar]
Private Sub Command1_Click()
    Dim X As Long, Y As Long
    With Printer
        .PaperSize = vbPRPSA4
        .Orientation = vbPRORPortrait

        .ForeColor = vbBlue
        .ScaleMode = vbTwips

        Printer.DrawWidth = 1
       
        X = (.DrawWidth * Screen.TwipsPerPixelX) / 2
        Y = (.DrawWidth * Screen.TwipsPerPixelY) / 2

        Printer.Line (X, Y)-(.Width - X, .Height - Y), vbRed, B
       
        .CurrentX = X
        .CurrentY = Y
       
        Printer.Print "HOLA"
       
        .EndDoc
    End With
End Sub


y me lo muestra bien

lo de   (.DrawWidth * Screen.TwipsPerPixelX) / 2  es porque los rectángulos dibujan el borde por la mitad (igual no estoy muy seguro si ese es el calculo)

no creo que sea muy conveniente trabajar sin margen porque la hoja no siempre va a entrar perfecta.

yo creo que el error ese que marcas es porque no le indicas .ScaleMode = vbTwips , yo hice unas pruebas y si vos lo probas primero en vbpixels y después  te cambias a twips y no se lo indicas (osea solo comentas    '.ScaleMode = vbpixels)  la impresora sigue en vbpixels  por eso es mejor indicárselo.

yo use el OneNote de Office



coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:[help] Maldito objeto PRINTER!!! (duda con margenes)
« Respuesta #2 en: Julio 02, 2010, 12:21:26 pm »
hola Coco yo probe con esto

Código: [Seleccionar]
Private Sub Command1_Click()
    Dim X As Long, Y As Long
    With Printer
        .PaperSize = vbPRPSA4
        .Orientation = vbPRORPortrait

        .ForeColor = vbBlue
        .ScaleMode = vbTwips

        Printer.DrawWidth = 1
       
        X = (.DrawWidth * Screen.TwipsPerPixelX) / 2
        Y = (.DrawWidth * Screen.TwipsPerPixelY) / 2

        Printer.Line (X, Y)-(.Width - X, .Height - Y), vbRed, B
       
        .CurrentX = X
        .CurrentY = Y
       
        Printer.Print "HOLA"
       
        .EndDoc
    End With
End Sub


y me lo muestra bien

lo de   (.DrawWidth * Screen.TwipsPerPixelX) / 2  es porque los rectángulos dibujan el borde por la mitad (igual no estoy muy seguro si ese es el calculo)

no creo que sea muy conveniente trabajar sin margen porque la hoja no siempre va a entrar perfecta.

yo creo que el error ese que marcas es porque no le indicas .ScaleMode = vbTwips , yo hice unas pruebas y si vos lo probas primero en vbpixels y después  te cambias a twips y no se lo indicas (osea solo comentas    '.ScaleMode = vbpixels)  la impresora sigue en vbpixels  por eso es mejor indicárselo.

yo use el OneNote de Office




muy bueno leandro, lo pude solucionar con eso que decis, pero lo de los margenes aparentemente era porque no imprimia bien en a4, osea lo pasaba a A3, carta, lo que sea, y seguia imprimiendo con el mismo tamaño. con el word no pasaba lo mismo, por eso ha de extrañarme. con una impresora de matriz de puntos estoy trabajando ahora, y ahi hago todas las pruebas y aparentemente los margenes estan bien.

saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion