|
Tabellen sind viel leichter zu lesen, wenn die Zeilen farblich voneinander abgesetzt werden. Beim ListView-Steuerelement aus den Microsoft Common Controls können Sie jedoch nur die Schriftfarbe einer Zeile (Eigenschaft ForeColor bei ListItems und ListSubItems) festlegen, nicht jedoch die Hintergrundfarbe.
Einen Ausweg bietet ab der Version 6 der Microsoft Common Controls die Picture-Eigenschaft des ListViews. Dieser Eigenschaft können Sie ein Hintergrundbild zuweisen, das die gewünschten Einfärbungen der Zeilen enthält. Das Bild braucht lediglich zwei Zeilen hoch (eine Zeile in der Hintergrundfarbe, eine Zeile in der alternativen Farbe) und wenige Pixels breit zu sein, wenn Sie die Eigenschaft PictureAlignment auf "5 - lvwTile" einstellen. Das Bild wird dann automatisch gekachelt und füllt so den gesamten Hintergrund aus. Das ListView sorgt selbst dafür, dass das Bild mitrollt, wenn die Zeilen horizontal oder vertikal gerollt werden. Auch wenn ListItems hinzugefügt oder entfernt werden bleibt die Zeileneinfärbung korrekt erhalten.
Allerdings wäre es recht umständlich, wenn Sie das Hintergrundbild selbst in einem Grafik-Programm erstellen müssten. Denn da die Zeilenhöhe von der Schriftgröße und von der Symbolgröße abhängt, müssten Sie nicht nur jedes Mal ein neues Bild erstellen, wenn sich diese Größen ändern, sondern Sie bräuchten auch noch verschiedene Bilder für die verschiedensten Kombinationen von Hintergrund- und Vordergrundfarbe.
Mit Hilfe einer PictureBox und der folgenden Hilfsfunktion können Sie jedoch die Erstellung des Hintergrundbildes automatisieren.
Sie übergeben der Funktion das betreffende ListView und die PictureBox. Als die eine der beiden Zeilenfarben wird die Hintergrundfarbe des ListViews übernommen. Die andere Zeilenfarbe können Sie als Hintergrundfarbe der PictureBox festlegen oder im letzten optionalen Parameter AltLineBackColor separat angeben. Übergeben Sie im vorletzten, ebenfalls optionalen Parameter BackColorFirst den Wert True, wird die erste Zeile in der Hintergrundfarbe dargestellt. Lassen Sie ihn weg oder übergeben Sie False, wird die erste Zeile in der alternativen Farbe dargestellt.
Die Funktion ist allerdings darauf angewiesen, dass das ListView mindestens ein Element enthält, damit die tatsächliche Zeilenhöhe ermittelt werden kann. Ist das ListView leer, wird kein Hintergrundbild zugewiesen und ein gegebenenfalls vorhandenes Hintergrundbild wird gelöscht. Anderenfalls gibt sie das neu angelegte Hintergrundbild zurück, das sie in einer Variablen ablegen und der Picture-Eigenschaft des ListViews erneut zuweisen können, wenn nach einem Leeren des ListViews wieder neue Elemente eingefügt werden.
Ändern Sie die Schriftgröße oder die Symbolgröße müssen Sie die Funktion wegen der bereits erwähnten Abhängigkeit der Zeilenhöhe erneut aufrufen.
Public Function LvwAltLinesBackground(ListView As ListView, _
PictureBox As PictureBox, Optional ByVal BackColorFirst As Boolean, _
Optional ByVal AltLineBackColor As OLE_COLOR = -1) As StdPicture
Dim nHeight As Single
Dim nScaleWidth As Single
Dim nAltLineBackColor As OLE_COLOR
With ListView
If .View = lvwReport Then
If .ListItems.Count Then
.PictureAlignment = lvwTile
nHeight = .ListItems(1).Height
With PictureBox
.Visible = False
.Cls
If AltLineBackColor = -1 Then
nAltLineBackColor = .BackColor
Else
nAltLineBackColor = AltLineBackColor
End If
.BackColor = ListView.BackColor
.BorderStyle = 0
.Height = nHeight * 2
.Width = 10 * Screen.TwipsPerPixelX
nScaleWidth = .ScaleWidth
.AutoRedraw = True
If BackColorFirst Then
PictureBox.Line (0, nHeight)-Step(nScaleWidth, nHeight), _
nAltLineBackColor, BF
Else
PictureBox.Line (0, 0)-Step(nScaleWidth, _
nHeight - Screen.TwipsPerPixelY), _
nAltLineBackColor, BF
End If
Set ListView.Picture = Nothing
Set ListView.Picture = .Image
Set LvwAltLinesBackground = .Image
.AutoRedraw = False
If AltLineBackColor = -1 Then
.BackColor = nAltLineBackColor
End If
End With
.Refresh
Exit Function
End If
End If
Set .Picture = Nothing
End With
End Function
|