Oftmals hat mein eine kleinere Liste, z.B. in einem ListView-Steuerelement, welche man bei Bedarf auch ausdrucken möchte. Der Crystal-Reportgenerator eignet sich hier eigentlich weniger, da er für diesen Zweck viel zu umständlich ist. Also bleibt meist nur der Weg über das VB Printer-Objekt. Der nachfolgende Tipp zeigt, wie sich die Einträge eines mehrspaltigen ListView-Elementes sauber untereinander ausdrucken lassen. Übergeben Sie der Druckroutine die linke Startposition (xPos) und die gewünschten Spaltenbreiten, und zwar in folgendem Format... Das ^-Zeichen bedeutet, daß der Inhalt dieser Spalte zentriert dargestellt werden soll. > gibt an, daß der Inhalt rechtsbündig ausgerichtet werden soll. Alle Maßangaben erfolgen hier in mm. Die Druckroutine ' Einzelne Zeile (alle Spalten) drucken Private Sub PrintRow(ByVal xPos As Integer, _ ByVal fmt As String, ByVal sRow As String) Dim OldScaleMode As Integer Dim sColWidth() As String Dim sColText() As String Dim I As Integer With Printer OldScaleMode = .ScaleMode .ScaleMode = 6 ' Maßeinheit "mm" sColWidth = Split(fmt, "|") sColText = Split(sRow, "|") If UBound(sColText) < UBound(sColWidth) Then _ ReDim Preserve sColText(UBound(sColWidth)) ' alle Spalten nacheinander drucken For I = 0 To UBound(sColWidth) .CurrentX = xPos Printer.Print PrintCheckLength(sColText(I), _ sColWidth(I)); If IsNumeric(Left$(sColWidth(I), 1)) Then xPos = xPos + Val(sColWidth(I)) Else xPos = xPos + Val(Mid$(sColWidth(I), 2)) End If Next I Printer.Print .ScaleMode = OldScaleMode End With End Sub ' Länge prüfen und ggf. abschneiden Private Function PrintCheckLength(ByVal sText As String, _ ByVal sWidth As String) As String Dim iLen As Integer If Left$(sWidth, 1) = "^" Or Left$(sWidth, 1) = ">" Then iLen = Val(Mid$(sWidth, 2)) Else iLen = Val(sWidth) End If With Printer ' wenn Text zu lang, Text am Ende kürzen While .TextWidth(sText) > iLen sText = Left$(sText, Len(sText) - 1) Wend If Left$(sWidth, 1) = "^" Then ' Text zentrieren While .TextWidth(sText) < iLen sText = " " + sText + " " Wend ElseIf Left$(sWidth, 1) = ">" Then ' Text rechtsbündig While .TextWidth(sText) < iLen sText = " " + sText Wend End If End With PrintCheckLength = RTrim$(sText) End Function Das nachfolgende Beispiel verwendet ein ListView-Steuerelement, um die einzelnen Positionen einer Rechnung anzuzeigen. Die einzelnen Spalten sind wie folgt festgelegt: Pos, Menge (rechtsbündig), Bezeichnung, Preis (rechtsbündig) und Gesamt (rechtsbündig). Unterhalb der Liste wird dann noch die Gesamtsumme angezeigt (lblSumme). Über einen CommandButton cmdPrint soll die Positionsauflistung ausgedruckt werden. ' Auflistung drucken Private Sub cmdPrint_Click() Dim fmt As String Dim sRow As String Dim xPos As Long Dim I As Integer Screen.MousePointer = 11 With Printer .ScaleMode = 6 ' Maßeinheit "mm" xPos = 20 ' 20mm Rand link .Font.Name = "Arial" .Font.Size = 12 .CurrentY = 20 .CurrentX = xPos .Font.Bold = True Printer.Print "POSITIONEN" + vbCrLf .Font.Bold = False ' Format (Spaltenbreiten) fmt = "^10|>15|5|85|>20|>25" ' Listenkopf .Font.Bold = True .Font.Size = 10 sRow = "Pos|Menge||Bezeichnung|Preis|Gesamt" PrintRow xPos, fmt, sRow .Font.Bold = False ' Artikelpositionen .CurrentY = .CurrentY + 5 For I = 1 To ListView1.ListItems.Count With ListView1.ListItems(I) sRow = .Text & "|" & .SubItems(1) & "||" & _ .SubItems(2) & "|" & .SubItems(3) & "|" & _ .SubItems(4) End With PrintRow xPos, fmt, sRow Next I ' Gesamtsumme .CurrentY = .CurrentY + 5 .Font.Bold = True fmt = ">20|>25" sRow = "Gesamt:|" & lblSumme.Caption PrintRow 135, fmt, sRow .Font.Bold = False ' Druckauftrag beenden .EndDoc End With Screen.MousePointer = 0 MsgBox "Artikel-Auflistung wurde ausgedruckt!", 64, _ "Drucken..." End Sub Dieser Tipp wurde bereits 34.689 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
||||||||||||||||
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. |