myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Form Inhalt drucken wie? (https://mygully.com/showthread.php?t=2079727)

moin2010 18.07.10 15:54

Form Inhalt drucken wie?
 
Hallo Leute

habe eine frage.
Ist es möglich den Inhalt einer Form zu drucken?
Also z.B Textboxen, Labels usw.
Aber kein MenuStrip.
Ich benutze Visual Basic 2008 Express.

Wäre super wen ihr mir helfen könntet!!

MfG moin2010

.ShoXx! 20.07.10 12:30

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] gibt ja viele Einträge bei Google.

moin2010 20.07.10 12:34

ok habs mir mal angeschaut muss ich dan mal ausprobieren.

moin2010 20.07.10 18:36

ich habs mir angeschaut aber bekomme es einfach nicht hin.

Ist es nicht vieleicht möglich das er dan einfag ein bild von
sich erstellt, anzeigt und das man dan auf einen Button klickt zum druckten?
Es kann sich von mir aus auch eine neu Form oder so öffnen wo man es dan sieht
und wo dan dort ein Button zum Drucken ist.

.ShoXx! 21.07.10 12:29

Zitat:

Zitat von moin2010 (Beitrag 21007402)
ich habs mir angeschaut aber bekomme es einfach nicht hin.

Was hat nicht geklappt? Welche Fehlermeldung?

moin2010 21.07.10 15:25

nein, das problem ist, ich weis nicht wo ich es einfügen muss!

.ShoXx! 21.07.10 18:09

Wo du es einfügen sollst? Da sind doch schon alle Events...
Oben unter "Public Class Form1":

Code:

Private Const SRCCOPY As Integer = &HCC0020
 
    Private Declare Function BitBlt _
  Lib "gdi32.dll" ( _
  ByVal hdcDest As IntPtr, _
  ByVal x As Int32, _
  ByVal y As Int32, _
  ByVal Width As Int32, _
  ByVal Height As Int32, _
  ByVal hdcSrc As IntPtr, _
  ByVal xSrc As Int32, _
  ByVal ySrc As Int32, _
  ByVal dwRop As Int32 _
  ) As Boolean
 
    Private formImage As Bitmap

Public Sub PrintForm()
        ' Gibt eine Bildschirmkopie einer am Bildschirm komplett
        ' sichtbaren Form auf dem Drucker aus (Screenshot).
        ' Platzieren Sie diesen Code im Form-Klassenmodul der
        ' Form, die Sie ausdrucken möchten.
 
        ' Zunächst: Bildschirmkopie der Form erzeugen.
        ' Nachteil: Verdeckte und anderweitig nicht sichtbare
        ' Teile(der) WinForm werden nicht mit in die Grafik
        ' aufgenommen.
 
        ' Graphics-Objekt für die Form erzeugen
        Dim formGraphics As Graphics = Me.CreateGraphics
 
        ' Kompatible Bitmap erzeugen und Graphics-Objekt abholen
        formImage = New Bitmap(Me.Width, Me.Height, formGraphics)
        Dim memGraphics As Graphics = Graphics.FromImage(formImage)
 
        ' Quell- und Ziel-DCs abholen
        Dim sourceDC As IntPtr = formGraphics.GetHdc
        Dim targetDC As IntPtr = memGraphics.GetHdc
 
        ' Kopieren ("Screenshot")
        BitBlt(targetDC, _
        0, 0, Me.ClientRectangle.Width, Me.ClientRectangle.Height, _
        sourceDC, _
        Me.ClientRectangle.X, Me.ClientRectangle.Y, _
        SRCCOPY)
 
        ' Alternative Variante folgend auskommentiert:
        ' Mit dem folgenden Code wird die gesamte Form (inkl. Rändern
        ' und Titelzeile) in die Ziel-Bitmap kopiert:
        ' BitBlt(targetDC, _
        '  0, 0, Me.Size.Width, Me.Size.Height, _
        '  sourceDC, _
        '  0, 0, _
        '  SRCCOPY)
 
        ' DCs freigeben
        formGraphics.ReleaseHdc(sourceDC)
        formGraphics.Dispose()
        memGraphics.ReleaseHdc(targetDC)
        memGraphics.Dispose()
 
        ' In formImage steht die Abbildung der Form nun zur Verfügung.
        ' Die Abbildung aus formImage ausdrucken:
        PrintDocument1.Print()
        formGraphics.Dispose()
 
    End Sub

Dann fügst du einen Button hinzu, doppelklick auf ihn:
Code:

Me.PrintForm()
Dann fügst du noch ein PrintDocument aus der Toolbox hinzu:

Code:

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

Per Buttonklick wird dann deine Form ausgedruckt.

moin2010 23.07.10 17:33

ich habe es jetzt alles mal eingefügt.

Jetzt habe ich eine Frage.

Ist es schlimm wen es ein Syntaxfehler gibt?

Weil der kommt bei: ByVal

urga 23.07.10 17:47

nein, das ist nicht schlimm, VB ist eh' ein einziger syntaxfehler ... ;)

hast du evntl. direkt davor ein '_' unterschlagen?

moin2010 20.08.10 18:11

ich habe jetzt mal ein test druck gemacht.
Kann man aber vieleicht das noch so machen, dass das MenuStrip nicht mit auf dem gedruckten Bild angezeigt wird?

.ShoXx! 20.08.10 20:09

Hab jetzt kein Bock zu suchen, aber du könntest ja direkt vor dem Drucken das MenuStrip verstecken..ist zwar nicht so ganz toll aber naja^^

moin2010 20.08.10 20:23

ne das is nich so gut.
wäre besser, wenn es gleich ohne MenuStrip gedruckt wird,
aber in der Form angezeigt wird.

moin2010 22.08.10 07:20

kann mir niemand helfen?

.ShoXx! 22.08.10 11:22

Zitat:

Zitat von moin2010 (Beitrag 21141771)
ne das is nich so gut.
wäre besser, wenn es gleich ohne MenuStrip gedruckt wird,
aber in der Form angezeigt wird.

Warum ist das nicht so gut? Vor dem Drucken versteckst du das MenuStrip mit -> MenuStrip1.Visible = False und danach wieder auf True stellen..das merkste dann gar nicht. Oder denkst du, dass das MenuStrip dann für immer verschwindet?

Hier ist ein kürzerer Code zum Ausdrucken der Form, denn der von oben ist etwas zu lang^^
Code:

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

Per Button die Form dann ausdrucken:
Code:

PrintDocument1.Print()


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.