Attribute VB_Name = "modListItemCheck"
Option Explicit

' *** Den Artikel zu diesem Modul finden Sie unter http://www.aboutvb.de/khw/artikel/khwlvwitemchecks.htm ***

Public Function LvwListItemCheck(ListView As ListView, ByVal x As Single, ByVal y As Single, Optional ListItem As ListItem) As Boolean
    Dim nPart As ListItemHitTestPartConstants
    
    Select Case ListItemHitTest(ListView, x, y, ListItem, Nothing, nPart)
        Case lhsListItem
            Select Case nPart
                Case lhpIcon
                    'ListItemCheckToggle ListItem
                    LvwListItemCheck = True
            End Select
    End Select
End Function

Public Function ListItemCheckToggle(Optional ListItem As ListItem, Optional ListView As ListView, Optional ListItemKey As Variant) As Boolean
    Dim nListItem As ListItem
    Dim nValue As Boolean
    Dim nSmallIcon As String
    
    Set nListItem = zGetListItem(ListItem, ListView, ListItemKey)
    If nListItem Is Nothing Then
        Err.Raise 380
    Else
        With nListItem
            nSmallIcon = .SmallIcon
            nValue = Not CBool(Left$(nSmallIcon, 1))
            .SmallIcon = Abs(nValue) & Mid$(nSmallIcon, 2)
            ListItemCheckToggle = nValue
        End With
    End If
End Function

Public Property Get ListItemChecked(Optional ListItem As ListItem, Optional ListView As ListView, Optional ListItemKey As Variant) As Boolean
    Dim nListItem As ListItem

    Set nListItem = zGetListItem(ListItem, ListView, ListItemKey)
    If nListItem Is Nothing Then
        Err.Raise 380
    Else
        ListItemChecked = CBool(Left$(ListItem.SmallIcon, 1))
    End If
End Property

Public Property Let ListItemChecked(Optional ListItem As ListItem, Optional ListView As ListView, Optional ListItemKey As Variant, Checked As Boolean)
    Dim nListItem As ListItem

    Set nListItem = zGetListItem(ListItem, ListView, ListItemKey)
    If nListItem Is Nothing Then
        Err.Raise 380
    Else
        With nListItem
            .SmallIcon = Abs(Checked) & Mid$(.SmallIcon, 2)
        End With
    End If
End Property

Private Function zGetListItem(ListItem As ListItem, ListView As ListView, ListItemKey As Variant) As ListItem
    If ListItem Is Nothing Then
        If Not (ListView Is Nothing) Then
            Set zGetListItem = ListView.ListItems(ListItemKey)
        End If
    Else
        Set zGetListItem = ListItem
    End If
End Function

