Tipp 0084 Windows Form drucken
Autor/Einsender:
Datum:
  Michael Werner
23.07.2005
Entwicklungsumgebung:   VB.Net 2003
Framework:   1.1
So einfach, wie beispielsweise in VB 6 ist es nicht mehr möglich, das Abbild einer Form auszudrucken. Den komfortablen VB-Befehl PrintForm gibt es in VB.Net nicht mehr.
Mit Hilfe der API-Funktion BitBlt und 2 Graphics-Objekten wird das Graphics-Objekt der Form in einem Bitmap zwischengespeichert und im PrintPage-Ereignis mit PrintDocument1.PrintPage und der DrawImage-Methode gezeichnet und ausgedruckt. Mit der GetHdc-Methode wird das Handle für den jeweiligen Gerätekontext abgerufen, das dem jeweiligen Graphics-Objekt zugeordnet ist. Diese Handle vom Datentyp InPtr werden der API_Funktion in den Parametern übergeben und das Form-Bitmap kopiert und zwischengespeichert. Mit der ReleaseHdc-Methode werden die Handle schließlich wieder freigegeben.
 
#Region " Form drucken "
  Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" ( _
        ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal _
        nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight _
        As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As _
        Integer, ByVal nYSrc As Integer, ByVal dwRop As _
        System.Int32) As Long

  Private Const SRCCOPY As Integer = &HCC0020
  Dim memoryImage As Bitmap

  Private Sub CaptureForm()
    Dim mygraphics As Graphics = Me.CreateGraphics()
    Dim sz As Size = Me.Size
    memoryImage = New Bitmap(sz.Width, sz.Height, mygraphics)

    Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
    Dim dc1 As IntPtr = mygraphics.GetHdc
    Dim dc2 As IntPtr = memoryGraphics.GetHdc
    BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, _
           Me.ClientRectangle.Height, dc1, 0, 0, SRCCOPY)
    mygraphics.ReleaseHdc(dc1)
    memoryGraphics.ReleaseHdc(dc2)
  End Sub

  Private Sub PrintDocument1_PrintPage(ByVal sender As _
        System.Object, ByVal e As System.Drawing.Printing. _
        PrintPageEventArgs) Handles PrintDocument1.PrintPage
    e.Graphics.DrawImage(memoryImage, 0, 0)
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    CaptureForm()
    PrintDocument1.Print()
  End Sub
#End Region
 
Weitere Links zum Thema
PrintForm-Komponente

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (23,4 kB) Downloads bisher: [ 948 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 21. Januar 2012