17 June 2005

Listview und Visual Basic 6

Controls unter Visual Basic 6 - speziell das Listview Control - sind nun wirklich sehr primitiv was die Zugriffsmethoden angeht. Es ist bspw. nicht möglich einen Full Row Select (beim Mausklick ganze Zeile markieren) standardmässig via die Control Properties einzustellen.

Glücklicherweise lässt sich dies via der Win API "nachrüsten", so dass die Listview doch noch anständig daher kommt. Das nachfolgende Listing zeigt wie es geht.


Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Private Const LVM_FIRST = &H1000
Private Const LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54)
Private Const LVM_GETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 55)

Public Const LVS_EX_FULLROWSELECT = &H20

Private Sub Check1_Click()

Dim state As Long

state = Check1.Value = 1
Call SendMessage(ListView1.hwnd, _
LVM_SETEXTENDEDLISTVIEWSTYLE, _
LVS_EX_FULLROWSELECT, ByVal state)

End Sub