Zeilen drucken

Vamp7771

Mitglied
Hallo,

habe 4 Zeilen definiert (String)
Befülle diese Zeilen durch Textboxen.

Wenn diese Zeilen <> "" sind soll das Programm diese Zeilen schön untereinander ausdrucken.


Nur...er druckt alle 4 Zeilen in 1 Zeile...sprich er überschreibt mir die Zeilen bis er bei Zeile 4 angekommen ist.

Hier der Druck code...
was mach ich nur falsch? :)
(der Code zum Befüllen der Zeilen ist nicht dabei, der ist aber easy - also da ist nichts falsch)

Code:
Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdoc.PrintPage
        ' Declare a variable to hold the position of the last printed char. Declare
        ' as static so that subsequent PrintPage events can reference it.
        Static intCurrentChar As Int32
        Dim font As New Font("Courier New", 14)
        'Dim font2 As New Font("Arial", 18)
        Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
        With pdoc.DefaultPageSettings
            ' Initialize local variables that contain the bounds of the printing 
            ' area rectangle.
            intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
            intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
            marginLeft = .Margins.Left ' X coordinate
            marginTop = .Margins.Top ' Y coordinate
        End With
        Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)
        Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
        Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
        Dim intLinesFilled, intCharsFitted As Int32

        'ZEILE1
        e.Graphics.MeasureString(Mid(Zeile1, intCurrentChar + 1), font, _
                           New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
                           intCharsFitted, intLinesFilled)
        e.Graphics.DrawString(Mid(Zeile1, intCurrentChar + 1), font, _
            Brushes.Black, rectPrintingArea, fmt)
        intCurrentChar += intCharsFitted
        'ZEILE2
        e.Graphics.MeasureString(Mid(Zeile2, intCurrentChar + 1), font, _
                          New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
                          intCharsFitted, intLinesFilled)
        e.Graphics.DrawString(Mid(Zeile2, intCurrentChar + 1), font, _
            Brushes.Black, rectPrintingArea, fmt)
        intCurrentChar += intCharsFitted
        'ZEILE3
        e.Graphics.MeasureString(Mid(Zeile3, intCurrentChar + 1), font, _
                          New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
                          intCharsFitted, intLinesFilled)
        e.Graphics.DrawString(Mid(Zeile3, intCurrentChar + 1), font, _
            Brushes.Black, rectPrintingArea, fmt)
        intCurrentChar += intCharsFitted
        'ZEILE 4
        e.Graphics.MeasureString(Mid(Zeile4, intCurrentChar + 1), font, _
                          New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
                          intCharsFitted, intLinesFilled)
        e.Graphics.DrawString(Mid(Zeile4, intCurrentChar + 1), font, _
            Brushes.Black, rectPrintingArea, fmt)
        intCurrentChar += intCharsFitted
        If intCurrentChar < Zeile4.Length Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
            intCurrentChar = 0
        End If
    End Sub


Weiß jm was ich falsch gemacht habe?

Gruß Vampy
 
Hi,

Du musst das Rectangle verschieben, in dem der String gezeichnet werden soll.
So wie du es jetzt hast, gibst du immer die selbe Position an, in der der String gezeichnet werden soll und überschreibst damit den Text.
 
Hm, ich denke das ist es wirklich!
Aber nun eine wirklich peinliche Frage...kannst du mir bitte einen Tipp geben, wie ich das verschieben soll...

rectPrintingArea = rectPrintingArea + intLinesFilled?

hm..help :)
 
Code:
Size stringSize = e.Graphics.DrawString( [...] ).ToSize
rectPrintingArea.Y += stringSize.Height
Btw. Ich würd aus dem Vorgang
Code:
e.Graphics.MeasureString(Mid(Zeile1, intCurrentChar + 1), font, _
	New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
	intCharsFitted, intLinesFilled)
e.Graphics.DrawString(Mid(Zeile1, intCurrentChar + 1), font, _
	Brushes.Black, rectPrintingArea, fmt)
intCurrentChar += intCharsFitted
eine Methode machen und ihr lediglich die Parameter übergeben. So bläht sich der Code nicht so auf,
ist besser les- und wartbar...
 
Zuletzt bearbeitet:
Zurück