Para la impresión probá de usar, en el OnPrintPage:

 

      Dim rect As Rectangle = Me.Panel.DisplayRectangle

 

en lugar de:

 

      Dim rect As Rectangle = Me.Panel.ClientRectangle

 

  _____  

De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Eliseo Alegre
Enviado el: Lunes, 03 de Marzo de 2008 02:13 p.m.
Para: vbnet List Member
Asunto: [vbnet] Grabar o imprimir el contenido de un panel

 

El panel en cuestion tiene muchos objetos por lo que utiliza una barra de 
desplazamiento horizontal.

 

El ejemplo tal cual está funciona perfectamente pero solo graba o imprime lo 
que está visible en pantalla.

 

Para el JPG lo arreglé cambiando el ancho antes de guardar y restaurandolo 
inmediatamente después, pero con la impresión esto no funciona... alguna 
sugerencia?

 

Gracias

 

Eliseo

        ----- Original Message ----- 

        From: Diego Cepero <mailto:[EMAIL PROTECTED]>  

        To: vbnet List Member <mailto:[email protected]>  

        Sent: Monday, March 03, 2008 3:39 PM

        Subject: [vbnet] Grabar o imprimir el contenido de un panel

         

        Un detalle: sería bueno hacer .Dispose() a los bitmaps una vez que 
terminaste de usarlos.

        Un saludo.

         

        
  _____  


        De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Eliseo 
Alegre
        Enviado el: Lunes, 03 de Marzo de 2008 01:09 p.m.
        Para: vbnet List Member
        Asunto: [vbnet] Grabar o imprimir el contenido de un panel

         

        Sos un maestro! Gracias por el ejemplo. Lo voy a probar, pero por lo 
que ví es exactamente lo que necesito.

         

        GRACIAS!!!

         

        Eliseo

                ----- Original Message ----- 

                From: Diego Cepero <mailto:[EMAIL PROTECTED]>  

                To: vbnet List Member <mailto:[email protected]>  

                Sent: Monday, March 03, 2008 2:34 PM

                Subject: [vbnet] Grabar o imprimir el contenido de un panel

                 

                Hola, 

                 

                            Hacé un proyecto con un formulario, que tenga un 
panel. Agregá varios controles a ese panel, y pegá el siguiente código en el 
formulario:

                 

                Imports System.Windows.Forms

                Imports System.Drawing

                Imports System.Drawing.Imaging

                Imports System.Drawing.Printing

                 

                Public Class Form1

                 

                   Private Sub btnGenerarJpg_Click(ByVal sender As 
System.Object, ByVal e As System.EventArgs) Handles btnGenerarJpg.Click

                      GuardarPanelComoJpg(Me.Panel1, "c:\temp\panel1.jpg")

                   End Sub

                 

                   Private Sub btnImprimir_Click(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles btnImprimir.Click

                      ImprimirPanel(Me.Panel1)

                   End Sub

                 

                   Private Sub GuardarPanelComoJpg(ByVal panel As Panel, _

                                                   ByVal ruta As String)

                 

                      Dim rect As Rectangle = panel.ClientRectangle

                      Dim jpg As New Bitmap(rect.Width, rect.Height)

                 

                      panel.DrawToBitmap(jpg, rect)

                 

                      jpg.Save(ruta, ImageFormat.Jpeg)

                   End Sub

                 

                   Private Sub ImprimirPanel(ByVal panel As Panel)

                 

                      Dim pd As New ImpresorPanel(panel)

                      Dim pvw As New PrintPreviewDialog()

                 

                      pvw.Document = pd

                      pvw.ShowDialog()

                   End Sub

                End Class

                 

                Public Class ImpresorPanel

                   Inherits PrintDocument

                 

                   Private _panel As Panel

                 

                   Public Sub New(ByVal panel As Panel)

                      _panel = panel

                   End Sub

                 

                   Public ReadOnly Property Panel() As Panel

                      Get

                         Return _panel

                      End Get

                   End Property

                 

                   Protected Overrides Sub OnPrintPage(ByVal e As 
System.Drawing.Printing.PrintPageEventArgs)

                      MyBase.OnPrintPage(e)

                 

                      Dim rect As Rectangle = Me.Panel.ClientRectangle

                      Dim bmp As New Bitmap(rect.Width, rect.Height)

                 

                      Me.Panel.DrawToBitmap(bmp, rect)

                      e.Graphics.DrawImage(bmp, 0, 0)

                   End Sub

                End Class

                 

                            Si querés imprimir en lugar de hacer una vista 
previa, llamá a pd.Print() en lugar de pvw.ShowDialog().

                            Un saludo.

                 

                
  _____  


                De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de 
Eliseo Alegre
                Enviado el: Lunes, 03 de Marzo de 2008 10:59 a.m.
                Para: vbnet List Member
                Asunto: [vbnet] Grabar o imprimir el contenido de un panel

                 

                Lista:

                 

                alguien sabe como puedo grabar una imagen (jpg) de todo el 
contenido de un panel? o como puedo hacer para que ese contenido se imprima?

                 

                Gracias

                 

                Eliseo

Responder a