ListView Control #1

By , 8. September 2006

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.

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy