ListView Control #1
Die Programmierung des Microsoft ActiveX ListView Control Version 6.0 soll hier in einigen Details erläutert werden.
Im Gegensatz zu dem gewöhnlichen Steuerelement Listenfeld besitzt das ListView Control keine Datenherkunft. Auch um die Spaltenbeschriftung etc muss man sich selbst ümmern. Dafür birgt es ungeahnte Möglichkeiten.
A) Sortieren mit Spaltenköpfen
Angenommen es existiert bereits ein ListView mit angelegten Spalten. Das Steuerelement soll den Namen listView0 haben, außerdem eine Imagelist mit 2 Bildern, z.B. Pfeil nach unten und oben die den Key „asc“ bzw. „desc“ haben (asc = aufsteigende, desc = absteigende Sortierung).
Private Sub listView0_ColumnClick(ByVal ColumnHeader As Object) Dim lstView As MSComctlLib.ListView If ColumnHeader.icon = 0 Then Exit Sub Static SortAsc As Boolean Set lstView = Me!listView0.Object SortAsc = Not SortAsc lstView.SortKey = ColumnHeader.Index - 1 If SortAsc = True Then lstView.SortOrder = lvwAscending ColumnHeader.icon = "asc" Else lstView.SortOrder = lvwDescending ColumnHeader.icon = "desc" End If lstView.Sorted = True End Sub
B) Dokument im ListView per Doppelklick öffnen
Globale Variablen in ein Modul einfügen:
Public MouseX As Single
Public MouseY As Single
Code im Formularmodul:
Private Sub listView0_DblClick() Dim Pfadname As String Dim lstItem As MSComctlLib.ListItem Set lstItem = Me!listView0.HitTest(MouseX, MouseY) If Not lstItem Is Nothing Then Pfadname = lstItem.SubItems(X) On Error Resume Next Call ShellExecute(Me.Hwnd, "open", Pfadname, "", "", 1) End If End Sub
Private Sub listView0_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Long, ByVal Y As Long) MouseX = X MouseY = Y End Sub
Im Beispiel seien im ListView Dokumente angezeigt, bzw. deren Pfad und Dateinamen. Dieser Pfad liegt in der Spalte X, die individuell angepasst werden muss. Beachten ist dabei das der SubItems-Index bei 0 beginnt.
Mittels der Methode HitTest() wird das ListItem lokalisiert zu dem die X/Y Koordinaten passen.