In einem früheren Tipp wurde bereits gezeigt, wie sich der Inhalt einer mehrzeiligen TextBox ausdrucken lässt: Mit nachfolgendem Klassenmodul lässt sich das Ganze jetzt noch einfacher und komfortabler handhaben. Sie brauchen der PrintText-Klasse lediglich den zu druckenden Text als String übergeben und rufen dann einfach die gewünschte Ausgabe auf: Ausdruck auf Drucker oder alternativ in eine Seitenvorschau. Desweitern wurde die PrintText-Klasse um weitere Eigenschaften und Methoden erweitert. Eigenschaften:
Methoden:
Das Klassenmodul PrintText.vb Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms Namespace Printing Public Class PrintText Private FirstTime As Boolean Private _Text As String Dim wörter() As String = Nothing Private AktWort As Integer Private AktBuchstabe As Integer Private WithEvents PD As New PrintDocument Private PS As New PageSetupDialog Private PrintD As New PrintDialog Private Prev As New PrintPreviewDialog Dim lands As Boolean Dim FColor As Brush = Brushes.Black Dim _Font As Font = New Font("Microsoft Sans Serif", _ 10, FontStyle.Regular, GraphicsUnit.Pixel) Dim FSize As Single = 10 Dim FStyle As FontStyle = Drawing.FontStyle.Regular #Region "Properties" ''' <summary> ''' Gibt die Schriftfarbe des Textes an oder ruft diese ab ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Public Property ForeColor() As Brush Get Return FColor End Get Set(ByVal value As Brush) FColor = value End Set End Property ''' <summary> ''' Gibt die Schrift an oder ruft diese ab ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Public Property Font(ByVal Schrift As Font) As System.Drawing.Font Get Return _Font End Get Set(ByVal value As System.Drawing.Font) _Font = value End Set End Property ''' <summary> ''' Gibt an ob die Seite im Hoch- oder Querformat gedruckt werden soll ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Public Property Landscape() As Boolean Get Return lands End Get Set(ByVal value As Boolean) lands = value PD.DefaultPageSettings.Landscape = value End Set End Property #End Region #Region "Print" ''' <summary> ''' Erstellt eine neue Instanz der Klasse PrintFromTextBox ''' </summary> ''' <remarks></remarks> Public Sub New() End Sub ''' <summary> ''' Erstellt eine neue Instanz der Klasse PrintFromTextBox ''' </summary> ''' <param name="Text">Gibt das gewünschte TextBox Control an</param> ''' <remarks></remarks> Public Sub New(ByVal Text As String) _Text = Text End Sub ''' <summary> ''' Druckt den Inhalt eines TextBox Controls ''' </summary> ''' <remarks></remarks> Public Sub Print() PD.Print() End Sub ''' <summary> ''' Gibt eine Druckvorschau aus ''' </summary> ''' <remarks></remarks> Public Sub PrintPreviewDialog() Prev.Document = PD Prev.ShowDialog() End Sub ''' <summary> ''' Zeigt das Fenster "Seite einrichten" an ''' </summary> ''' <remarks></remarks> Public Sub PageSetupDialog() PS.Document = PD PS.AllowOrientation = True PS.EnableMetric = True PS.ShowDialog() End Sub ''' <summary> ''' Zeigt das Fenster "Drucken" an ''' </summary> ''' <remarks></remarks> Public Sub PrintDialog() PrintD.Document = PD PrintD.UseEXDialog = True PrintD.AllowSomePages = False PrintD.AllowCurrentPage = False PrintD.ShowNetwork = True If PrintD.ShowDialog() = DialogResult.OK Then For i As Integer = 0 To PrintD.PrinterSettings.MaximumCopies - 1 PD.Print() Next End If End Sub Private Sub PD_PrintPage(ByVal sender As Object, _ ByVal e As PrintPageEventArgs) Handles PD.PrintPage e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias Dim left As Decimal = PD.DefaultPageSettings.Margins.Left Dim right As Decimal = PD.DefaultPageSettings.Margins.Right Dim top As Decimal = PD.DefaultPageSettings.Margins.Top Dim bottom As Decimal = PD.DefaultPageSettings.Margins.Bottom Dim pagewidth As Integer = PD.DefaultPageSettings.Bounds.Width - left - right Dim pageheight As Integer = PD.DefaultPageSettings.Bounds.Height - top - bottom Dim zeile As String = "" Dim Teilwort As String Dim wort As String Dim PosY As Integer e.Graphics.DrawRectangle(Pens.Red, left, top, pagewidth, pageheight) If Not FirstTime Then Dim TBText As String = _Text.Replace(vbNewLine, " " & vbNewLine & " ") wörter = TBText.Split(" ") AktWort = 0 FirstTime = True End If e.HasMorePages = False If FirstTime Then zeile = "" wort = "" Do wort = wörter(AktWort) If e.Graphics.MeasureString(wort, _Font).Width > pagewidth Then ' Wort ist Länger als Zeile Teilwort = "" Do If e.Graphics.MeasureString(zeile & wort(AktBuchstabe), _ _Font).Width < pagewidth Then zeile &= wort(AktBuchstabe) AktBuchstabe += 1 Else ' zeile is voll e.Graphics.DrawString(zeile, _Font, FColor, left, top + PosY) PosY += e.Graphics.MeasureString(zeile, _Font).Height AktBuchstabe += 1 If PosY > pageheight - e.Graphics.MeasureString(zeile, _ _Font).Height Then PosY = 0 e.HasMorePages = True Exit Sub End If zeile = "" End If Loop While AktBuchstabe < wort.Length ' restliche buchstaben drucken e.Graphics.DrawString(zeile, _Font, FColor, left, top + PosY) AktBuchstabe = 0 ' If wörter.Length > 1 Then AktWort += 1 ' End If Else If wort = vbNewLine Then e.Graphics.DrawString(zeile, _Font, FColor, left, top + PosY) PosY += e.Graphics.MeasureString(zeile, _Font).Height zeile = "" AktWort += 1 ElseIf e.Graphics.MeasureString(zeile & wort, _Font).Width < pagewidth Then zeile &= wort & " " AktWort += 1 Else ' Zeile is voll e.Graphics.DrawString(zeile, _Font, FColor, left, top + PosY) PosY += e.Graphics.MeasureString(zeile, _Font).Height zeile = "" End If End If If PosY > pageheight - e.Graphics.MeasureString(zeile, _Font).Height Then PosY = 0 e.HasMorePages = True Exit Do End If Loop While AktWort <= wörter.Length - 1 ' Letzte Zeile drucken e.Graphics.DrawString(zeile, _Font, FColor, left, top + PosY) End If End Sub #End Region End Class End Namespace Beispiel für die Verwendung der PrintText-Klasse: ' Inhalt eines mehrzeiligen TextBox-Controls drucken Dim oPrint As New Printing.PrintText(TextBox1.Text) ' hier ggf. weitere Einstellung vornehmen, wie bspw. Farbe ' ... ' in Seitenvorschau drucken oPrint.PrintPreviewDialog Credits: Dieser Tipp wurde bereits 33.575 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |