Imprimir la pantalla

15/09/2004 - 10:50 por Toni | Informe spam
Hola a todos...

Estoy buscando la forma de imprimir un formulario tal cual... pero no
encuentro cómo...

Supongo que podré capturar la pantalla, pasarla a un Picture e imprimirlo
desde allí... Si alguien tiene una mejor idea para hacerlo...

Si lo consigo os cuento cómo lo he hecho.

Muchas gracias y un saludo.

Preguntas similare

Leer las respuestas

#1 DJ MIAo
15/09/2004 - 11:50 | Informe spam
Flaco comprate una camara digital y le tiras una foto.




Miao.
Comprate un libro..

Hola a todos...

Estoy buscando la forma de imprimir un formulario tal


cual... pero no
encuentro cómo...

Supongo que podré capturar la pantalla, pasarla a un


Picture e imprimirlo
desde allí... Si alguien tiene una mejor idea para


hacerlo...

Si lo consigo os cuento cómo lo he hecho.

Muchas gracias y un saludo.


.

Respuesta Responder a este mensaje
#2 Ezequiel
15/09/2004 - 12:28 | Informe spam
jeje, desde luego que no puedo dejar de sonreir. Joder¡¡, es que ya
respondes a todas las preguntas¡¡¡, jeje

Un saludo
"DJ MIAo" escribió en el mensaje
news:281801c49b09$650083c0$
Flaco comprate una camara digital y le tiras una foto.




Miao.
Comprate un libro..

Hola a todos...

Estoy buscando la forma de imprimir un formulario tal


cual... pero no
encuentro cómo...

Supongo que podré capturar la pantalla, pasarla a un


Picture e imprimirlo
desde allí... Si alguien tiene una mejor idea para


hacerlo...

Si lo consigo os cuento cómo lo he hecho.

Muchas gracias y un saludo.


.

Respuesta Responder a este mensaje
#3 Pedro Luna Montalvo, MVP
16/09/2004 - 05:09 | Informe spam
Estoy preparando un articulo precisamente sobre esto.

Todavia no lo termino y tengo muchas cosas que revisar y optimizar en el
codigo, pero te paso lo que tengo para que los pruebes:

1. Declara lo siguiente
Private Declare Function GetDesktopWindow Lib "user32.dll" () As IntPtr

Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As IntPtr) As
IntPtr

Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hDc As
IntPtr) As IntPtr

Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hDc
As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer) As IntPtr

Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hDc As IntPtr,
ByVal hObject As IntPtr) As Integer

Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As IntPtr,
ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal
nHeight As Integer, ByVal hSrcDC As IntPtr, ByVal XSrc As Integer, ByVal
YSrc As Integer, ByVal dwRop As Integer) As Integer

Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As IntPtr,
ByVal hDc As IntPtr) As Integer

Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hDc As IntPtr) As
Integer

Public Const SRCCOPY As Integer = &HCC0020



2. El siguiente codigo copia tu formulario a un mapa de bits

' Retorna manejador a todo el escritorio

Dim hDesktopWindow As IntPtr = GetDesktopWindow()

' Retorna manejador del contexto de dispositivo asociado a este objeto

Dim hDc = GetDC(hDesktopWindow)

' Crea un contexto de dispositivo de memoria compatible asociado a este
objeto

Dim hDcMem = CreateCompatibleDC(hDc)

' Crea un Bitmap compatible con el dispositivo asociado al DC indicado

Dim hBitmap As IntPtr = CreateCompatibleBitmap(hDc, Me.Width, Me.Height)

' Seleccionar el objeto Bitmap en el DC

SelectObject(hDcMem, hBitmap)

' Copiar la imagen

BitBlt(hDcMem, 0, 0, Me.Width, Me.Height, hDc, Me.Left, Me.Top, SRCCOPY)

' Crear un objeto Bitmap con el manejador

Dim dibujo As Bitmap = Bitmap.FromHbitmap(hBitmap)

dibujo.Save("prueba.bmp", Imaging.ImageFormat.Bmp)

dibujo.Dispose()

DeleteDC(hDcMem)

ReleaseDC(Me.Handle, hdc)





Luego te aviso para enviarte el codigo final...



Saludos

Pedro Luna, MVP

Gye, Ecu




"Toni" escribió en el mensaje
news:%
Hola a todos...

Estoy buscando la forma de imprimir un formulario tal cual... pero no
encuentro cómo...

Supongo que podré capturar la pantalla, pasarla a un Picture e imprimirlo
desde allí... Si alguien tiene una mejor idea para hacerlo...

Si lo consigo os cuento cómo lo he hecho.

Muchas gracias y un saludo.


Respuesta Responder a este mensaje
#4 Toni
16/09/2004 - 10:08 | Informe spam
He encontrado el siguiente código en esta página,
http://www.knowdotnet.com/articles/printform.html

Me voy apañando con él, aunque sí que me gustaría ver lo que has hecho
cuando lo tengas terminado.

Muchas gracias por todo y un saludo.


"Pedro Luna Montalvo, MVP" escribió en
el mensaje news:%
Estoy preparando un articulo precisamente sobre esto.

Todavia no lo termino y tengo muchas cosas que revisar y optimizar en el
codigo, pero te paso lo que tengo para que los pruebes:

1. Declara lo siguiente
Private Declare Function GetDesktopWindow Lib "user32.dll" () As IntPtr

Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As IntPtr) As
IntPtr

Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hDc As
IntPtr) As IntPtr

Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hDc
As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer) As IntPtr

Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hDc As
IntPtr,
ByVal hObject As IntPtr) As Integer

Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As IntPtr,
ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal
nHeight As Integer, ByVal hSrcDC As IntPtr, ByVal XSrc As Integer, ByVal
YSrc As Integer, ByVal dwRop As Integer) As Integer

Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As IntPtr,
ByVal hDc As IntPtr) As Integer

Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hDc As IntPtr) As
Integer

Public Const SRCCOPY As Integer = &HCC0020



2. El siguiente codigo copia tu formulario a un mapa de bits

' Retorna manejador a todo el escritorio

Dim hDesktopWindow As IntPtr = GetDesktopWindow()

' Retorna manejador del contexto de dispositivo asociado a este objeto

Dim hDc = GetDC(hDesktopWindow)

' Crea un contexto de dispositivo de memoria compatible asociado a este
objeto

Dim hDcMem = CreateCompatibleDC(hDc)

' Crea un Bitmap compatible con el dispositivo asociado al DC indicado

Dim hBitmap As IntPtr = CreateCompatibleBitmap(hDc, Me.Width, Me.Height)

' Seleccionar el objeto Bitmap en el DC

SelectObject(hDcMem, hBitmap)

' Copiar la imagen

BitBlt(hDcMem, 0, 0, Me.Width, Me.Height, hDc, Me.Left, Me.Top, SRCCOPY)

' Crear un objeto Bitmap con el manejador

Dim dibujo As Bitmap = Bitmap.FromHbitmap(hBitmap)

dibujo.Save("prueba.bmp", Imaging.ImageFormat.Bmp)

dibujo.Dispose()

DeleteDC(hDcMem)

ReleaseDC(Me.Handle, hdc)





Luego te aviso para enviarte el codigo final...



Saludos

Pedro Luna, MVP

Gye, Ecu




"Toni" escribió en el mensaje
news:%
Hola a todos...

Estoy buscando la forma de imprimir un formulario tal cual... pero no
encuentro cómo...

Supongo que podré capturar la pantalla, pasarla a un Picture e imprimirlo
desde allí... Si alguien tiene una mejor idea para hacerlo...

Si lo consigo os cuento cómo lo he hecho.

Muchas gracias y un saludo.






Respuesta Responder a este mensaje
#5 Pedro Luna Montalvo
16/09/2004 - 15:40 | Informe spam
Perfecto!

El codigo original que te pase era un codigo aplicable a VB6 donde realizaba
esta operacion, y tenia pendiente el paso de esas llamadas GDI para que usen
las clases GDI+.

El articulo que mencionas lo muestra lo mismo, pero ya en accion con las
clases GDI+.

Saludos
Pedro Luna, MVP
Gye, Ecu

P.D. Cuando termine el articulo "Migrando codigo GDI de VB6 a VB.NET", te lo
paso, ok!


"Toni" escribió en el mensaje
news:%
He encontrado el siguiente código en esta página,
http://www.knowdotnet.com/articles/printform.html

Me voy apañando con él, aunque sí que me gustaría ver lo que has hecho
cuando lo tengas terminado.

Muchas gracias por todo y un saludo.


"Pedro Luna Montalvo, MVP" escribió


en
el mensaje news:%
> Estoy preparando un articulo precisamente sobre esto.
>
> Todavia no lo termino y tengo muchas cosas que revisar y optimizar en el
> codigo, pero te paso lo que tengo para que los pruebes:
>
> 1. Declara lo siguiente
> Private Declare Function GetDesktopWindow Lib "user32.dll" () As IntPtr
>
> Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As IntPtr)


As
> IntPtr
>
> Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hDc


As
> IntPtr) As IntPtr
>
> Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal


hDc
> As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer) As IntPtr
>
> Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hDc As
> IntPtr,
> ByVal hObject As IntPtr) As Integer
>
> Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As


IntPtr,
> ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal
> nHeight As Integer, ByVal hSrcDC As IntPtr, ByVal XSrc As Integer, ByVal
> YSrc As Integer, ByVal dwRop As Integer) As Integer
>
> Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As


IntPtr,
> ByVal hDc As IntPtr) As Integer
>
> Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hDc As IntPtr)


As
> Integer
>
> Public Const SRCCOPY As Integer = &HCC0020
>
>
>
> 2. El siguiente codigo copia tu formulario a un mapa de bits
>
> ' Retorna manejador a todo el escritorio
>
> Dim hDesktopWindow As IntPtr = GetDesktopWindow()
>
> ' Retorna manejador del contexto de dispositivo asociado a este objeto
>
> Dim hDc = GetDC(hDesktopWindow)
>
> ' Crea un contexto de dispositivo de memoria compatible asociado a este
> objeto
>
> Dim hDcMem = CreateCompatibleDC(hDc)
>
> ' Crea un Bitmap compatible con el dispositivo asociado al DC indicado
>
> Dim hBitmap As IntPtr = CreateCompatibleBitmap(hDc, Me.Width, Me.Height)
>
> ' Seleccionar el objeto Bitmap en el DC
>
> SelectObject(hDcMem, hBitmap)
>
> ' Copiar la imagen
>
> BitBlt(hDcMem, 0, 0, Me.Width, Me.Height, hDc, Me.Left, Me.Top, SRCCOPY)
>
> ' Crear un objeto Bitmap con el manejador
>
> Dim dibujo As Bitmap = Bitmap.FromHbitmap(hBitmap)
>
> dibujo.Save("prueba.bmp", Imaging.ImageFormat.Bmp)
>
> dibujo.Dispose()
>
> DeleteDC(hDcMem)
>
> ReleaseDC(Me.Handle, hdc)
>
>
>
>
>
> Luego te aviso para enviarte el codigo final...
>
>
>
> Saludos
>
> Pedro Luna, MVP
>
> Gye, Ecu
>
>
>
>
> "Toni" escribió en el mensaje
> news:%
>> Hola a todos...
>>
>> Estoy buscando la forma de imprimir un formulario tal cual... pero no
>> encuentro cómo...
>>
>> Supongo que podré capturar la pantalla, pasarla a un Picture e


imprimirlo
>> desde allí... Si alguien tiene una mejor idea para hacerlo...
>>
>> Si lo consigo os cuento cómo lo he hecho.
>>
>> Muchas gracias y un saludo.
>>
>>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida