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 35.144 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. |
sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |