Druckeigenschaften VB zeigen keine Wirkung

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Jenlues.

    Druckeigenschaften VB zeigen keine Wirkung

    Hallo,

    ich habe ein Programm mit Visual Studio (VB) geschrieben, was von einer Form eine Grafik erstellt und diese dann auf ein etikett druckt. Ich rufe ja die Funktion auf für die Druckereigenschaften. Diese werden aber ignoriert wenn ich etwas auswähle wie z.B 4 Exemplare Drucken. Er druckt trotzdem nur eines.... Auch wenn ich ihm den Drucker vorgebe nimmt er nur den Standartdrucker der für den Benutzer angelegt ist.


    Ich hab das starke Gefühl das ich etwas vergessen habe....
    Jemand eine Idee ?




    VB.NET-Quellcode

    1. Imports System.Drawing
    2. PublicClassForm2
    3. Inherits System.Windows.Forms.Form
    4.  
    5.  
    6.  
    7. #Region" Vom Windows Form Designer generierter Code "
    8. #EndRegion
    9. PrivateConst SRCCOPY AsInteger = &HCC0020
    10. PrivateDeclareFunction BitBlt _
    11. Lib"gdi32.dll" ( _
    12. ByVal hdcDest AsIntPtr, _
    13. ByVal x AsInt32, _
    14. ByVal y AsInt32, _
    15. ByVal Width AsInt32, _
    16. ByVal Height AsInt32, _
    17. ByVal hdcSrc AsIntPtr, _
    18. ByVal xSrc AsInt32, _
    19. ByVal ySrc AsInt32, _
    20. ByVal dwRop AsInt32 _
    21. ) AsBoolean
    22. Private formImage AsBitmap
    23.  
    24.  
    25.  
    26.  
    27.  
    28. PrivateSub PrintDocument1_PrintPage( _
    29. ByVal sender As System.Object, _
    30. ByVal e As System.Drawing.Printing.PrintPageEventArgs _
    31. ) Handles PrintDocument1.PrintPage
    32. ' Screenshot ausdrucken
    33. e.Graphics.DrawImage(formImage, 0, 0)
    34. EndSub
    35. PrivateSub Form2_Load(sender AsObject, e AsEventArgs) HandlesMyBase.Load
    36. Me.Visible = True
    37.  
    38. Label1.Text = Etikettendruck.ab
    39. Label2.Text = Etikettendruck.zn
    40. Label3.Text = Etikettendruck.bn
    41. Label4.Text = Etikettendruck.ma
    42. Label5.Text = Etikettendruck.st
    43.  
    44.  
    45. EndSub


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Willkommen im Forum. :thumbup:
    Zunächst solltest Du keine Datei editieren, die xxx.Designer.vb heißt.
    Dann soltest Du die Funktion API.BitBlt() nicht benutzen müssen, das geht alles ganz einfach.
    Fang an und erstell Dur ein separates Projekt, bei dem Du das Drucken eines Bildes (und sonst nix weiter) lernst.
    PictureBox -> Image vorgeben
    Button -> Druck starten
    PrintDocument -> PrintPage-Event:

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. e.Graphics.DrawImage(PictureBox1.Image, New Point(30, 30))
    3. End Sub
    und nix weiter.
    Wenn das klappt, dann kommt der nächste Schritt ...
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Erstellte DruckForm

    Dankeschön hoffe mal ich lebe mich hier so ein :D

    So, gut ich sehe es ein --> Schulungsbedarf :)

    Hier mein fertiger Code druckt auch ;)





    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub PrintPage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintPage.Click
    3. PrintDocument1.PrinterSettings.Copies = 1
    4. PrintDocument1.Print()
    5. End Sub
    6. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    7. e.Graphics.DrawImage(PictureBox1.Image, New Point(30, 30))
    8. End Sub
    9. End Class


    Und nu ?
    Jetzt fängst Du an, um das Bild herum Text zu drucken, die Koordinaten musst Du dann berechnen.
    Die Graphics-Klasse stellt dafür die Function MeasureString() bereit:

    VB.NET-Quellcode

    1. Dim sz As SizeF = e.Graphics.MeasureString("bla", Me.Font)
    Suche bei Bedarf nach mehrzeiligem Druck.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sieh Dir mal dies an:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. Dim bmp As New Bitmap("C:\Temp\test.jpeg")
    3. Dim txt = "Dies ist ein Test"
    4. Dim ft = New Font("Arial", 20)
    5. Dim x As Single = 30
    6. Dim y As Single = 30
    7. e.Graphics.DrawImage(bmp, New PointF(x, y))
    8. Dim sz As SizeF = e.Graphics.MeasureString(txt, ft)
    9. e.Graphics.DrawString(txt, ft, Brushes.Black, New PointF(x, y + bmp.Height + sz.Height))
    10. e.Graphics.DrawString("Anhang", ft, Brushes.Black, New PointF(x + sz.Width, y + bmp.Height + sz.Height))
    11. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So habe die Verlinkungen auf mein Projekt umgelegt siehe da es funktioniert.

    Muss ich jetzt wenn ich Das Etikett damit designen will für jeden Schriftzug neue Felder definieren und sie dann auf das Bild nagivieren ?
    Jetzt schreibt er es ja unters Bild, oder komplett ohne Picture box arbeiten und den Text den Variabeln entziehen und auf den ausdruck umleiten ? (Natürlich mit genauen angaben wo was hingeschrieben wird)
    Ja, diese Art des Druckens impliziert, dass Du jedes Objekt einzeln positionierst.
    Wenn Du viel zu malen hast, sieh Dir mal GraphicsPath an, da kannst Du in sich geschlossene Komponenten "vorfertigen".
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hat Jetzt alles geklappt.
    Bedanke mich herzlich bei dir :)


    VB.NET-Quellcode

    1. Public Class Begleitkarte
    2. Private Sub PrintPage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintPage.Click
    3. PrintDocument1.PrinterSettings.Copies = NumericUpDown1.Text
    4. PrintDocument1.Print()
    5. End Sub
    6. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    7. Dim txt = artikel.Text
    8. Dim txt1 = bestell.Text
    9. Dim txt2 = zeichnung.Text
    10. Dim txt3 = material.Text
    11. Dim txt4 = stueck.Text
    12. Dim ft = New Font("Arial", 20)
    13. Dim x As Single = 10
    14. Dim y As Single = 10
    15. Dim sz As SizeF = e.Graphics.MeasureString(txt, ft)
    16. e.Graphics.DrawString(txt, ft, Brushes.Black, New PointF(x, y))
    17. e.Graphics.DrawString(txt1, ft, Brushes.Black, New PointF(x, y + 25))
    18. e.Graphics.DrawString(txt2, ft, Brushes.Black, New PointF(x, y + 50))
    19. e.Graphics.DrawString(txt3, ft, Brushes.Black, New PointF(x, y + 75))
    20. e.Graphics.DrawString(txt4, ft, Brushes.Black, New PointF(x + 130, y + 75))
    21. End Sub
    22. End Class