vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Drucker   |   VB-Versionen: VB606.07.01
Sauberer ListView-Ausdruck

Eine Routine, die es erlaubt eine mehrspaltige Liste sauber untereinander auszudrucken.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  35.144 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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...

Breite1|^Breite1|>Breite3

...und die zu drucken Daten, wobei die einzelnen Spalten-Inhalte ebenfalls durch das |-Zeichen voneinander getrennt sind.

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

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel