Título: Imprimir Formulario Mayor a la pantalla vb net
Publicado por: Rudy21 en 19 Julio 2011, 08:21 am
Buenas Tengo un pequeño problema, estoy intentando imprimir un formato en vb net (VS2010) no puedo hacer el form mas grande a 768 por que es el límite que me pone mi resolución así que agregué un picturebox del tamaño que necesito e hice el form autoscroll = true para agregar los datos del formato que me faltaban Pero al momento de imprimirlo solo sale la parte del form que se ve, tanto con PRINTFORM como con PRINTDOCUMENT Con PrintForm Uso este código PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Top = 0 PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Left = 0 PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Right = 0 PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Bottom = 0 PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = False PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable) con el printdocument es un poco más largo EN EL EVENTO CLICK Dim printdoc As PrintDocument printdoc = New PrintDocument AddHandler printdoc.PrintPage, AddressOf OnPrintPage printdoc.DefaultPageSettings.Margins.Top = 0 printdoc.DefaultPageSettings.Margins.Left = 0 printdoc.DefaultPageSettings.Margins.Bottom = 0 printdoc.Print() una CLASE Public Class Win32APICall
Public Const DIB_RGB_COLORS = 0 Public Const BI_RGB = 0 Public Const WHITENESS = 16711778
<DllImport("user32.dll", EntryPoint:="PrintWindow", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function PrintWindow(ByVal hWnd As IntPtr, ByVal hDC As IntPtr, ByVal dwFlags As Integer) As UInt32 End Function
<StructLayout(LayoutKind.Sequential, pack:=8, CharSet:=CharSet.Auto)> _ Structure BITMAPINFOHEADER Dim biSize As Int32 Dim biWidth As Int32 Dim biHeight As Int32 Dim biPlanes As Int16 Dim biBitCount As Int16 Dim biCompression As Int32 Dim biSizeImage As Int32 Dim biXPelsPerMeter As Int32 Dim biYPelsPerMeter As Int32 Dim biClrUsed As Int32 Dim biClrImportant As Int32 End Structure
<DllImport("gdi32.dll", EntryPoint:="CreateDIBSection", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function CreateDIBSection(ByVal hdc As IntPtr, ByRef pbmi As BITMAPINFOHEADER, _ ByVal iUsage As Int32, ByVal ppvBits As IntPtr, ByVal hSection As IntPtr, _ ByVal dwOffset As Int32) As IntPtr End Function
<DllImport("gdi32.dll", EntryPoint:="PatBlt", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function PatBlt(ByVal hDC As IntPtr, ByVal nXLeft As Int32, _ ByVal nYLeft As Int32, ByVal nWidth As Int32, ByVal nHeight As Int32, _ ByVal dwRop As Int32) As Boolean End Function
<DllImport("gdi32.dll", EntryPoint:="SelectObject", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function SelectObject(ByVal hDC As IntPtr, ByVal hObj As IntPtr) As IntPtr End Function
<DllImport("GDI32.dll", EntryPoint:="CreateCompatibleDC", SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function CreateCompatibleDC(ByVal hRefDC As IntPtr) As IntPtr End Function
<DllImport("GDI32.dll", EntryPoint:="DeleteDC", SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function DeleteDC(ByVal hDC As IntPtr) As Boolean End Function
<DllImport("GDI32.dll", EntryPoint:="DeleteObject", SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function DeleteObject(ByVal hObj As IntPtr) As Boolean End Function
<DllImport("User32.dll", EntryPoint:="ReleaseDC", SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function ReleaseDC(ByVal hWnd As IntPtr, ByVal hDC As IntPtr) As Boolean End Function
<DllImport("User32.dll", EntryPoint:="GetDC", SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function GetDC(ByVal hWnd As IntPtr) As IntPtr End Function
End Class un SUB Private Sub OnPrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Dim hwndForm As IntPtr hwndForm = Me.Handle
Dim hdcDIBSection As IntPtr Dim hdcRef As IntPtr Dim hbmDIBSection As IntPtr Dim hbmDIBSectionOld As IntPtr Dim BMPheader As Win32APICall.BITMAPINFOHEADER
hdcRef = Win32APICall.GetDC(IntPtr.Zero) hdcDIBSection = Win32APICall.CreateCompatibleDC(hdcRef) Win32APICall.ReleaseDC(IntPtr.Zero, hdcRef)
BMPheader.biBitCount = 24 BMPheader.biClrImportant = 0 BMPheader.biClrUsed = 0 BMPheader.biCompression = Win32APICall.BI_RGB BMPheader.biSize = 40 BMPheader.biHeight = 964 BMPheader.biPlanes = 1 BMPheader.biSizeImage = 0 BMPheader.biWidth = Me.Width BMPheader.biXPelsPerMeter = 0 BMPheader.biYPelsPerMeter = 0
hbmDIBSection = Win32APICall.CreateDIBSection(hdcDIBSection, BMPheader, Win32APICall.DIB_RGB_COLORS, _ IntPtr.Zero, IntPtr.Zero, 0)
hbmDIBSectionOld = Win32APICall.SelectObject(hdcDIBSection, hbmDIBSection) Win32APICall.PatBlt(hdcDIBSection, 0, 0, Me.Width, 964, Win32APICall.WHITENESS) Win32APICall.PrintWindow(hwndForm, hdcDIBSection, 0) Win32APICall.SelectObject(hdcDIBSection, hbmDIBSectionOld)
Dim imageFrm As Bitmap imageFrm = Image.FromHbitmap(hbmDIBSection) e.Graphics.DrawImage(imageFrm, 0, 0)
Win32APICall.DeleteDC(hdcDIBSection) Win32APICall.DeleteObject(hbmDIBSection) End Sub y las declaraciones Generales Imports System.Drawing.Printing Imports System.Drawing.Graphics Imports System.Drawing.Imaging Imports System.Runtime.InteropServices pero ninguna de las dos me imprime el formulario completo necesito imprimir el formato que mide 964 pixeles de largo es CASI una hoja carta alguna sugerencia?
|