Hallo,
beim Drucken aus meiner Anwendung unter Windows 10 kommt es zu folgendem Fehler:
Allgemeiner Fehler in GDI+.
bei System.Drawing.Graphics.MeasureString(String text, Font font, SizeF layoutArea, StringFormat stringFormat, Int32& charactersFitted, Int32& linesFilled)
bei WindowsApplication1.Form1.pdoc_PrintPage(Object sender, PrintPageEventArgs e)
Unter Windows XP und 7 funktioniert das problemlos. Hat jemand eine Idee woran das liegt?
Hier der Code:
Imports System.Drawing.Printing
Public Class Form1
Friend PrintDocument1 As New PrintDocument
Friend PrintPreviewDialog1 As New PrintPreviewDialog
Public Sub New()
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf
' hinzu.
AddHandler PrintDocument1.PrintPage, AddressOf pdoc_PrintPage
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
SeitenEinrichtungLaden()
End Sub
Private Sub SeitenEinrichtungLaden()
PrintDocument1.DefaultPageSettings.PaperSize.Height = CInt(210 / 0.254)
PrintDocument1.DefaultPageSettings.PaperSize.Width = CInt(297 / 0.254)
PrintDocument1.DefaultPageSettings.Margins.Left = CInt(18 / 0.254)
PrintDocument1.DefaultPageSettings.Margins.Top = CInt(18 / 0.254)
PrintDocument1.DefaultPageSettings.Margins.Right = CInt(18 / 0.254)
PrintDocument1.DefaultPageSettings.Margins.Bottom = CInt(18 / 0.254)
PrintDocument1.DefaultPageSettings.Landscape = True
End Sub
Private Sub cmdVorschau_Click(sender As System.Object, e As _
System.EventArgs) Handles cmdVorschau.Click
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.WindowState = FormWindowState.Maximized
PrintPreviewDialog1.ShowDialog()
End Sub
Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As _
System.Drawing.Printing.PrintPageEventArgs) 'Handler wird in New erstellt
Try
Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop, _
intCharsFitted, intLinesFilled As Int32
With PrintDocument1.DefaultPageSettings
' Lokale Variablen initialisieren, die die Begrenzungen des
' Druckbereichrechtecks enthalten.
intPrintAreaHeight = .PaperSize.Height - .Margins.Top - _
.Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - _
.Margins.Right
' Lokale Variablen initialisieren, die die Randwerte enthalten,
' die als X- und Y-Koordinaten für die oberen linke Ecke des
' Druckbereichrechtecks verwendet werden.
marginLeft = .Margins.Left ' X-Koordinate
marginTop = .Margins.Top ' Y-Koordinate
End With
Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, _
intPrintAreaWidth, intPrintAreaHeight)
Dim fntBody As New Font("Arial", 10, FontStyle.Regular)
Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
Dim strDruck As New String(ChrW(65), 40000)
' "MeasureString" aufrufen, um die Anzahl von Zeichen zu ermitteln,
' die das Druckbereichrechteck aufnehmen kann.
e.Graphics.MeasureString(strDruck, fntBody, New SizeF( _
intPrintAreaWidth, intPrintAreaHeight), fmt, intCharsFitted, _
intLinesFilled)
MsgBox(intCharsFitted.ToString & " - " & intLinesFilled.ToString)
' Text an die Seite ausgeben.
e.Graphics.DrawString(strDruck.Substring(0, intCharsFitted), _
fntBody, Brushes.Black, rectPrintingArea, fmt)
e.HasMorePages = False
Catch ex As Exception
Dim st = New StackTrace(ex, True) : MsgBox(ex.Message & vbCrLf & _
st.ToString)
End Try
End Sub
End Class Danke schon mal für die Hilfe!
Carsten
------------
Alle Menschen sind klug. Die einen vorher, die anderen nachher. (Voltaire)
|