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

VB6 - Imprimir form ajustado al tamaño de pagina

Estas en el tema de VB6 - Imprimir form ajustado al tamaño de pagina en el foro de Visual Basic clásico en Foros del Web. Hola amigos!!! Tengo problemas para imprimir, deseo imprimer un form, pero al imprmirlo como mi pantalla no es del mismo tamaño que el papel al ...
  #1 (permalink)  
Antiguo 02/05/2008, 08:55
Avatar de Kitty_05  
Fecha de Ingreso: marzo-2008
Ubicación: SITEL un call center en Panamá
Mensajes: 100
Antigüedad: 16 años, 1 mes
Puntos: 0
Exclamación VB6 - Imprimir form ajustado al tamaño de pagina

Hola amigos!!!

Tengo problemas para imprimir, deseo imprimer un form, pero al imprmirlo como mi pantalla no es del mismo tamaño que el papel al imprmir se cortan textbox o campos q deben mostrarse entonces un amigo del foro me sugirio lo q posteo a continuacion...

Cita:
captures el Área de Cliente, o sea, tu ventana, y lo pegas en un PictureBox, allí le ajustas el tamaño de acuerdo al tamaño del papel (Printer.ScaleWidth), después envías la imagen a la impresora (Printer.PaintPicture)... .
Pero el pobre no tiene VB6 instalado como para poder guiarme con el codigo alguien.. podria ayudarme? .. jamas he hecho esto me ayudan?
  #2 (permalink)  
Antiguo 02/05/2008, 16:11
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Re: VB6 - Imprimir form ajustado al tamaño de pagina

Bueno, al fin pude buscar el código para hacer lo que te comentaba.
Este código debes copiar en un módulo, es para capturar el área de cliente de tu ventana (Código copiado de http://www.jrubi.com/):
Código:
 
Option Explicit
Private Type PALETTEENTRY
   peRed As Byte
   peGreen As Byte
   peBlue As Byte
   peFlags As Byte
End Type
Private Type LOGPALETTE
   palVersion As Integer
   palNumEntries As Integer
   palPalEntry(255) As PALETTEENTRY
End Type
Private Type GUID
   Data1 As Long
   Data2 As Integer
   Data3 As Integer
   Data4(7) As Byte
End Type
Private Type PicBmp
   Size As Long
   Type As Long
   hBmp As Long
   hPal As Long
   Reserved As Long
End Type
Private Const RASTERCAPS As Long = 38
Private Const RC_PALETTE As Long = &H100
Private Const SIZEPALETTE As Long = 104
Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hDCSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetWindowDC Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function GetDC Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal iCapabilitiy As Long) As Long
Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long
Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Private Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) As Long
Private Declare Function ReleaseDC Lib "USER32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Public Function CaptureClient(frmSrc As Form) As Picture
Set CaptureClient = CaptureWindow(frmSrc.hWnd, True, 0, 0, frmSrc.ScaleX(frmSrc.ScaleWidth, frmSrc.ScaleMode, vbPixels), frmSrc.ScaleY(frmSrc.ScaleHeight, frmSrc.ScaleMode, vbPixels))
End Function
Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, ByVal LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture
Dim hDCMemory As Long
Dim hBmp As Long
Dim hBmpPrev As Long
Dim r As Long
Dim hDCSrc As Long
Dim hPal As Long
Dim hPalPrev As Long
Dim RasterCapsScrn As Long
Dim HasPaletteScrn As Long
Dim PaletteSizeScrn As Long
Dim LogPal As LOGPALETTE
If Client Then
    hDCSrc = GetDC(hWndSrc)
Else
    hDCSrc = GetWindowDC(hWndSrc)
End If
hDCMemory = CreateCompatibleDC(hDCSrc)
hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
hBmpPrev = SelectObject(hDCMemory, hBmp)
RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS)
HasPaletteScrn = RasterCapsScrn And RC_PALETTE
PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE)
If HasPaletteScrn And (PaletteSizeScrn = 256) Then
    LogPal.palVersion = &H300
    LogPal.palNumEntries = 256
    r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0))
    hPal = CreatePalette(LogPal)
    hPalPrev = SelectPalette(hDCMemory, hPal, 0)
    r = RealizePalette(hDCMemory)
End If
r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)
hBmp = SelectObject(hDCMemory, hBmpPrev)
If HasPaletteScrn And (PaletteSizeScrn = 256) Then
    hPal = SelectPalette(hDCMemory, hPalPrev, 0)
End If
r = DeleteDC(hDCMemory)
r = ReleaseDC(hWndSrc, hDCSrc)
Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)
End Function
Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture
Dim r As Long
Dim Pic As PicBmp
Dim IPic As IPicture
Dim IID_IDispatch As GUID
With IID_IDispatch
   .Data1 = &H20400
   .Data4(0) = &HC0
   .Data4(7) = &H46
End With
With Pic
   .Size = Len(Pic)
   .Type = vbPicTypeBitmap
   .hBmp = hBmp
   .hPal = hPal
End With
r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
Set CreateBitmapPicture = IPic
End Function
Y para Imprimir hacemos esto:
Código:
 
picImprimir.Picture = CaptureClient(Me)
Printer.PaintPicture picImprimir.Picture, 0, 0, Printer.ScaleWidth, (Me.ScaleHeight * Printer.ScaleWidth) / Me.ScaleWidth, , , Me.ScaleWidth, Me.ScaleHeight
Printer.EndDoc
No te garantizo que funcione correctamente, pues recuerda que al momento de capturar la ventana, captura como imagen, así que al ajustar su tamaño a uno menor es probable que el texto impreso no quede tan bien.

No obstante, quizás te sirva. Me avisas si te sirve, si no a otro se le puede ocurrir una idea mejor...

Saludos

P.S.: Ni siquiera he probado el código, porque de tan 'pobre' (jeje) tampoco tengo impresora.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 02/05/2008, 18:41
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Re: VB6 - Imprimir form ajustado al tamaño de pagina

Hola,aca tenes una forma,es casi lo mismo que puso David..

Capturar el área cliente del formulario y pegar la imagen en el portapapeles

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #4 (permalink)  
Antiguo 05/05/2008, 08:36
Avatar de Kitty_05  
Fecha de Ingreso: marzo-2008
Ubicación: SITEL un call center en Panamá
Mensajes: 100
Antigüedad: 16 años, 1 mes
Puntos: 0
Exclamación Re: VB6 - Imprimir form ajustado al tamaño de pagina

Tenemos dos inconvenientes, hasta el momento no he usado los modulos .bas ...
El segundo es que coloque todo lo que me pusieron una cosa en el modulo directo, copie y pegue, lo de imprmir lo coloque en un boton yme manda error..
Código:
picImprimir.Picture = CaptureClient(Me)
- ---- en esta linea
  #5 (permalink)  
Antiguo 05/05/2008, 09:33
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Re: VB6 - Imprimir form ajustado al tamaño de pagina

Cita:
Iniciado por Kitty_05 Ver Mensaje
Tenemos dos inconvenientes, hasta el momento no he usado los modulos .bas ...
El segundo es que coloque todo lo que me pusieron una cosa en el modulo directo, copie y pegue, lo de imprmir lo coloque en un boton yme manda error..
Código:
picImprimir.Picture = CaptureClient(Me)
- ---- en esta linea
Bueno, simplemente agrega un .bas y pegas el código, no tiene misterio...
Segundo, debes colocar un PictureBox con el nombre picImprimir (en ella se pega la imagen del área de cliente del Formulario, puedes colocar Visible = False)...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 05/05/2008, 09:52
Avatar de Kitty_05  
Fecha de Ingreso: marzo-2008
Ubicación: SITEL un call center en Panamá
Mensajes: 100
Antigüedad: 16 años, 1 mes
Puntos: 0
Exclamación Re: VB6 - Imprimir form ajustado al tamaño de pagina

Son unos geniossssssssssssssssssssssssssss gracias mil todo queda perfecto nada se ve borroso o distorcionado ... Los Amo !!!
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 17:42.