Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Imprimir un Form

Estas en el tema de Imprimir un Form en el foro de Visual Basic clásico en Foros del Web. Haber si alguien me puede ayudar quiero imprimir un formulario en el ke tengo un picture y dentro de esto muchos objetos , el tamaño ...
  #1 (permalink)  
Antiguo 14/12/2005, 13:03
 
Fecha de Ingreso: diciembre-2004
Mensajes: 371
Antigüedad: 19 años, 4 meses
Puntos: 0
Imprimir un Form

Haber si alguien me puede ayudar quiero imprimir un formulario en el ke tengo un picture y dentro de esto muchos objetos , el tamaño que tiene es muy superior a lo que muestra por pantalla y se desplaza hacia abajo con una VScroll.

El problema esta en que el printform solo me imprime lo ke justo hay en la pantalla y yo quiero ke me imprima todo el formulario entero.

La unica solucion que he hallado hast ahora es cambiar la resolucion a la mayor imprimir y volver a dejarla como estaba, pero no me convence demasiado.

Espero haya otra solución.

Gracias.
  #2 (permalink)  
Antiguo 15/12/2005, 04:12
 
Fecha de Ingreso: diciembre-2004
Mensajes: 371
Antigüedad: 19 años, 4 meses
Puntos: 0
por si a alguien le sirve encontre esto




El método PrintForm imprime sólo la parte del formulario que se muestra. Este artículo muestra cómo imprimir un formulario que es más grande que la pantalla o que sólo se ve parcialmente.

MAS INFORMACION
Si necesitas imprimir un formulario mayor que la pantalla, o que sólo se muestra parcialmente, debes situar los controles del formulario en un PictureBox. Este imprime el bitmap que contiene, en lugar de la captura de pantalla del formulario que es lo que hace PrintForm. Como el bitmap del PictureBox está almacenado en un device context en memoria, tienes acceso al bitmap entero y no a la parte que se muestra.

NOTA: Para el propósito de este artículo, la altura del formulario se ha puesto en 11 pulgadas. Si necesitas otro tamaño, como 8,5 x 14 pulgadas, modifica la variable sTall. También debes tener en cuenta que esta medidas están realizadas en twips porque es la escala por defecto de los formualrios. Si cambias la propiedad ScaleMode necesitas cambiar estos valores adecuadamente.

Imprimir un formulario más grande que la pantalla.
- Arranca un nuevo proyecto, se creará el formulario Form1 por defecto.

- Añade dos PictureBox al formulario, evitando situar el segundo dentro del primero.

- Pulsa con el botón derecho sobre Picture2 y selecciona "Enviar al fondo".

- Añade dos etiquetas al Picture1, dejando Picture2 vacío.

- Añade el siguiente código a la sección de Declaraciones del formulario Form1:


Private Const twipFactor = 1440
Private Const WM_PAINT = &HF
Private Const WM_PRINT = &H317
Private Const PRF_CLIENT = &H4& ' Draw the window's client area.
Private Const PRF_CHILDREN = &H10& ' Draw all visible child windows.
Private Const PRF_OWNED = &H20& ' Draw all owned windows.

Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long

Private Sub Form_Load()
Dim sWide As Single, sTall As Single
Dim rv As Long

Me.ScaleMode = vbTwips ' default
sWide = 8.5
stall = 11 ' or 14, etc.
Me.Width = twipFactor * sWide
Me.Height = twipFactor * stall
With Picture1
.Top = 0
.Left = 0
.Width = twipFactor * sWide
.Height = twipFactor * stall
End With
With Picture2
.Top = 0
.Left = 0
.Width = twipFactor * sWide
.Height = twipFactor * stall
End With
With Label1
.Caption = "Top"
.Left = Me.Width / 2
.Top = 0
End With
With Label2
.Caption = "Bottom"
.Top = (twipFactor * stall) - .Height * 2
.Left = Me.Width / 2
End With
Me.Visible = True
DoEvents

Picture1.SetFocus
Picture2.AutoRedraw = True
rv = SendMessage(Picture1.hwnd, WM_PAINT, Picture2.hDC, 0)
rv = SendMessage(Picture1.hwnd, WM_PRINT, Picture2.hDC, _
PRF_CHILDREN + PRF_CLIENT + PRF_OWNED)
Picture2.Picture = Picture2.Image
Picture2.AutoRedraw = False

Printer.Print ""
Printer.PaintPicture Picture2.Picture, 0, 0
Printer.EndDoc
End Sub

- Ejecuta el proyecto.

Las etiquetas Top y Botton deben aparecer en sus respectivas posiciones, independientemente de si el formulario se muestra por completo.


Imprimir un formulario en más de una página.
Si el formulario que estás imprimiendo es demasiado grande para caber en una página puedes emplear un sistema similar. El método PaintPicture tiene varios parámetros opcionales que sirven, entre otras cosas, para imprimir sólo parte de la imagen.

Para verlo localiza el siguiente código en el ejemplo anterior:

Printer.Print ""
Printer.PaintPicture Picture2.Picture, 0, 0
Printer.EndDoc

Sustitúyelas por lo siguiente :

Printer.Print ""
Printer.PaintPicture Picture2.Picture, 0, 0, , , _
0, 0, , Picture2.Height / 2
Printer.NewPage
Printer.PaintPicture Picture2.Picture, 0, 0, , , _
0, Picture2.Height / 2, , Picture2.Height / 2
Printer.EndDoc

Este código divide el formulario en dos partes a modo de ejemplo. Puedes ajustar la región de corte a tus necesidades.
  #3 (permalink)  
Antiguo 15/12/2005, 15:13
Avatar de roniarg  
Fecha de Ingreso: octubre-2005
Mensajes: 21
Antigüedad: 18 años, 6 meses
Puntos: 0
y si no tambien prueba en meterlo dentro de un mdi como hijo y le haces un printform
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:34.