La Web del Programador: Comunidad de Programadores
 
    Pregunta:  11572 - IMPRIMIR FORMULARIO CENTRADO
Autor:  Martin Jimenez
Hola,quisiera saber si alguien me puede ayudar ,ya que soy nuevo en vb6 y mi pregunta es como puedo hacer para que todo un form a la hora de imprimirlo con el metodo printform
salga centrado en la hoja
gracias y saludos...

form1.printform
printer.enddoc

  Respuesta:  Manuel B.F.
Hola buenos días. A mi me pasa el mismo caso que la respuesta de Alfonso XIV. Necesito que el formulario que tengo en Excel, como solo ocupa medio dina A4, me lo repita otra vez en la misma página. Así tengo los datos rellenados e impresos en original y copia.
No entiendo mucho de Excel y no se como acoplar la función que dice Alfonso que a él le va bien. Yo, dentro del botón que tiene el mismo formulario ( IMPRIMIR ), le he puesto el código Me.PrintForm.
Como he dicho me imprime el formulario, pero con todas las variaciones que he probado, no ha habido manera de que me imprima dos veces en la misma hoja.

Alguna ayuda, por favor

  Respuesta:  Alfonso XIV
Si quieres una impresión especial, vete olvidando del método printform. Es muy cómodo pero muy básico, se limita a enviar el formulario, con la resolución de pantalla, y enviar un salto de página a la impresora. Ya está. Yo tuve que ingeniármelas para imprimir un formulario 2 veces en la misma hoja (p.ej., un recibo por duplicado) con el menor trabajo posible. Y se me ocurrió enviar los controles del formulario a la impresora con el objeto \"PRINTER\", a través de una rutina genérica que escribí.
El esquema básico de mi rutina era:

Public Sub ImprForm(Formulario as Form)
Dim Ctrl as Control
For each Ctrl in Formulario.controls
If typeof ctrl is label or typeof ctrl is textbox then
printer.currentx=ctrl.left
printer.currenty=ctrl.top
printer.print ctrl
endif
next
End Sub

Puedes adaptarla para centrar el formulario, calculando un offset o desplazamiento desde el margen izquierdo del papel. Para ello sólo tendrias que restar el ancho (en twips) del formulario (.width) del ancho del objeto Printer y dividirlo entre 2. Ese offset se lo sumarias a los valores de printer.currentx.