Form + Picturebox drucken

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Marc.

    Form + Picturebox drucken

    Hallo zusammen,

    ich habe ein programm welches verschiedene werte aus textboxen einliest und daraus eine Grafik in einer Picturebox erzeugt.

    Ich möchte jetzt gerne die komplette Form + die Picturebox drucken über einen Menüpunkt, wie bei fast allen programmen auch.
    Mein Druckbefehl sieht im moment so aus:

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. Dim bmp As New Bitmap(Me.Width, Me.Height)
    3. Me.DrawToBitmap(bmp, New Rectangle(0, 0, Me.Width, Me.Height))
    4. e.Graphics.DrawImage(bmp, 0, 0)
    5. End Sub


    allerding ist dabei die picturebox nicht mit drauf.
    Bei dem Printpreviewdialog sind nur alle menüs und textboxen und labels drauf und da wo die picturebox ist, ist nur eine graue fläche.

    hab schon viel rumprobiert und gelesen aber ich bekomme das irgendwie nicht hin.

    kann mir jemand einen tipp oder rat geben wie man das lösen kann?

    vielen dank schonmal
    okay ich hab mal ein paar andere sachen ausprobiert.

    Ich hab es jetzt geschafft einen Screenshot von der Form zu erstellen und den auch speichern zu können
    über eine API Funktin und da wird auch die Picturebox mit kopiert.

    Dann wollte ich versuchen das so ähnlich mit dem drucken zu machen aber das sieht komisch aus (siehe Anhang).
    Bzw. der scheint jetzt eine vorschau von dem Printpreviewdialog zu machen oder so ähnlich.

    Hier der code fürs drucken :

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. Dim bmp As New Bitmap(Me.Width, Me.Height)
    3. Dim g As Graphics = Graphics.FromImage(bmp)
    4. Dim pt As POINTAPI
    5. pt.x = -7
    6. pt.y = -30
    7. ClientToScreen(Me.Handle, pt)
    8. g.CopyFromScreen(pt.x, pt.y, 0, 0, Me.Size)
    9. ' Bitmap-Objekt drucken
    10. Dim gr As Graphics = e.Graphics
    11. gr.DrawImage(bmp, 0, 0)
    12. e.HasMorePages = False
    13. g.Dispose()
    14. End Sub



    kann mir jemand sagen wo mein fehler liegt?


    P.S.: Das Bild im Anhang zeigt wie der Printpreviwdialog aussieht, bzw so wird das auch gedruckt
    Bilder
    • Unbenannt2.png

      187,82 kB, 1.600×900, 342 mal angesehen
    so ich habe von einem bekannten einen code bekommen der für mich ziemlich komplex ist, aber damit scheint man das problem lösen zu können.

    VB.NET-Quellcode

    1. Private Sub DruckenToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DruckenToolStripMenuItem1.Click
    2. PrintDialog1.PrinterSettings.DefaultPageSettings.Landscape = True
    3. If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    4. PrintDocument1.PrinterSettings = PrintDialog1.PrinterSettings
    5. PrintDocument1.Print()
    6. Else : End If
    7. End Sub
    8. Function CaptureForm1() As Bitmap
    9. Dim g1 As Graphics = Me.CreateGraphics()
    10. Dim MyImage = New Bitmap(Me.Width, Me.ClientRectangle.Height, g1)
    11. Dim g2 As Graphics = Graphics.FromImage(MyImage)
    12. Dim dc1 As IntPtr = g1.GetHdc()
    13. Dim dc2 As IntPtr = g2.GetHdc()
    14. BitBlt(dc2, 0, 0, Me.Width, Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
    15. g1.ReleaseHdc(dc1)
    16. g2.ReleaseHdc(dc2)
    17. MyImage.Save("c:\abc.bmp")
    18. Return MyImage
    19. End Function
    20. <DllImport("gdi32.DLL", EntryPoint:="BitBlt", _
    21. SetLastError:=True, CharSet:=CharSet.Unicode, _
    22. ExactSpelling:=True, _
    23. CallingConvention:=CallingConvention.StdCall)> _
    24. Private Shared Function 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 Boolean
    25. End Function


    Hier noch der teil der zum Druck event gehört

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. img = CaptureForm1()
    3. Dim x As Integer = e.MarginBounds.X
    4. Dim y As Integer = e.MarginBounds.Y
    5. e.Graphics.DrawImage(img, x, y)
    6. e.HasMorePages = False
    7. End Sub


    allerdings sieht das jetzt immernoch nicht so aus wie es eigentlich gedacht war.
    Das Bild soll das komplette blatt ausfüllen, da unten rechts in der ecke noch was abgeschnitten wurde
    im anhang ist ein bild wie es aussieht.

    da das alles so ziemlich chinesisch für mich ist, habe ich noch nicht herausgefunden wie man das jetzt noch richtig positionieren kann.

    könnte mir da vielleicht jemand helfen?

    P.S.: Ich weiß das man keine C&P codes verwenden sollte. aber anders krieg ich es jetzt auch nicht hin.

    Wär coll wenn mir jemand helfen könnte.
    Bilder
    • Unbenannt3.png

      203,85 kB, 1.600×900, 345 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DasHuhn“ ()