Listview Probleme mit _GUICtrlListView_DeleteAllItems

  • Hallo com,

    in einer LV in der ich die Items mit _GUICtrlListView_AddItem und die SbItems mit _GUICtrlListView_AddSubItem erzeuge, habe ich das Problem, dass beim Löschen aller Items mit _GUICtrlListView_DeleteAllItems und danach neu erstellen von Items ich am Ende der LV unerwünschte Einträge habe. Hier das Skript:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui, $listview, $hImage, $b, $iCount
    Global $Combo, $aFile, $sDLLName, $Msg
    Local $exStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)
    $hGui = GUICreate("Icon-Übersicht " & $sDLLName, 1024, 500, 0, 0)
    $Combo = GUICtrlCreateCombo("", 2, 2, 120)
    $aFile = _FileListToArray(@SystemDir, "*.DLL")
    GUICtrlSetData($Combo, "Bitte einen DLL auswählen")
    For $i = 1 To $aFile[0]
    GUICtrlSetData($Combo, $aFile[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;$listview = _GUICtrlListView_Create($hGui,"", 2, 42, 1020, 456,BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
    $listview = GUICtrlCreateListView("", 2, 42, 1020, 456, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($listview, $exStyles)
    For $i = 1 To 8
    ; Fügt die Spalten hinzu
    _GUICtrlListView_AddColumn($listview, "Spalte " & $i, 120)
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    GUICtrlSetData($Combo, "shell32.dll", "shell32.dll")
    _showIcons("shell32.dll")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo
    $sDLLName = GUICtrlRead($Combo)
    _showIcons($sDLLName)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _showIcons($sDLLName)
    Local $iSpalten, $iZeilen, $iBilder
    _GUICtrlListView_DeleteAllItems($listview)
    _GUIImageList_Destroy($hImage)

    [/autoit] [autoit][/autoit] [autoit]

    ; Lädt die Bilder
    $hImage = _GUIImageList_Create(24, 24, 5, 3, 128, 256)
    For $iBilder = 0 To 255
    _GUIImageList_AddIcon($hImage, @SystemDir & "\" & $sDLLName, $iBilder)
    Next
    _GUICtrlListView_SetImageList($listview, $hImage, 1)
    $iCount = _GUIImageList_GetImageCount($hImage)
    ConsoleWrite($iCount & @CRLF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $iBilder = -1
    For $iZeilen = 1 To Int(($iCount - 1) / 8) + 1
    $iBilder += 1
    ; Fügt die Items hinzu
    _GUICtrlListView_AddItem($listview, "Bild: " & $iBilder, $iBilder)
    For $iSpalten = 1 To 7
    $iBilder += 1
    ; fügt die SubItems hinzu
    _GUICtrlListView_AddSubItem($listview, $iZeilen-1, "Bild: " & $iBilder, $iSpalten, $iBilder)
    Next
    Next
    EndFunc ;==>_showIcons

    [/autoit]

    um den Effekt zu sehen einfach in der ComboBox eine DLL runter und wieder hochblättern.

    Des weiteren wäre es interessant für mich zu wissen, wie ich vor der Aufnahme einer DLL in die Auswahl-Combo feststellen kann ob diese überhaupt ICONS enthält, dies ist aber sekundär,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (18. September 2010 um 22:29)

  • Danke i2c, damit ist das primäre Poblem gelöst.

    Ideen zu

    Des weiteren wäre es interessant für mich zu wissen, wie ich vor der Aufnahme einer DLL in die Auswahl-Combo feststellen kann ob diese überhaupt ICONS enthält,

    bitte trotz Gelöst posten


    mfg autoBert

  • danke i2c,

    ich habe es mittlerweile so gelöst:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #cs evtl. nützliche
    compstui
    #ce

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui, $listview, $hImage, $b, $iCount
    Global $Combo, $Progress, $Label,$aFile, $sDLLName, $Msg, $hListview
    Local $exStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)
    $hGui = GUICreate("Icon-Übersicht " & $sDLLName, 1024, 500, 0, 0)
    $Combo = GUICtrlCreateCombo("", 2, 2, 120)
    $Progress = GUICtrlCreateProgress(125, 2, 200)
    $Label = GUICtrlCreateLabel("TEST",330,2,200)
    $aFile = _FileListToArray(@SystemDir, "*.DLL")

    [/autoit] [autoit][/autoit] [autoit]

    $listview = GUICtrlCreateListView("", 2, 42, 1020, 456, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
    $hListview = ControlGetHandle($hGui, "", $listview)
    _GUICtrlListView_SetExtendedListViewStyle($listview, $exStyles)
    For $i = 1 To 8
    ; Fügt die Spalten hinzu
    _GUICtrlListView_AddColumn($listview, "Spalte " & $i, 120)
    Next
    GUISetState()
    For $i = 1 To $aFile[0]
    If _LoadIcons($aFile[$i]) > 0 Then GUICtrlSetData($Combo, $aFile[$i])
    GUICtrlSetData($Progress, 100 - ($i / $aFile[0] * 100))
    GUICtrlSetData($Label,$i & " / " & $aFile[0])
    Next
    GUICtrlSetData($Combo, "shell32.dll", "shell32.dll")
    _showIcons("shell32.dll")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo
    $sDLLName = GUICtrlRead($Combo)
    _showIcons($sDLLName)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _showIcons($sDLLName)
    Local $iSpalten, $iZeilen, $iBilder
    _GUICtrlListView_DeleteAllItems($hListview)
    $iCount = _LoadIcons($sDLLName)
    ConsoleWrite($sDLLName & " " & $iCount & @CRLF)
    _GUICtrlListView_SetImageList($listview, $hImage, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $iBilder = -1
    For $iZeilen = 1 To Int(($iCount - 1) / 8) + 1
    $iBilder += 1
    ; Fügt die Items hinzu
    _GUICtrlListView_AddItem($listview, "Bild: " & $iBilder, $iBilder)
    For $iSpalten = 1 To 7
    $iBilder += 1
    ; fügt die SubItems hinzu
    _GUICtrlListView_AddSubItem($listview, $iZeilen - 1, "Bild: " & $iBilder, $iSpalten, $iBilder)
    Next
    Next
    Local $iLVZeilen = _GUICtrlListView_GetItemCount($listview)
    ConsoleWrite($iZeilen & " " & $iLVZeilen & @CRLF)
    For $i = $iZeilen To $iLVZeilen - 1
    _GUICtrlListView_DeleteItem($listview, $i)
    Next
    EndFunc ;==>_showIcons

    [/autoit] [autoit][/autoit] [autoit]

    Func _LoadIcons($sDLLName)
    Local $iCount, $iBilder, $iError
    _GUIImageList_Destroy($hImage)

    [/autoit] [autoit][/autoit] [autoit]

    ; Lädt die Bilder
    $hImage = _GUIImageList_Create(24, 24, 5, 3, 128, 256)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\" & $sDLLName, 0,True)
    $iBilder = 1
    Do
    $iError = _GUIImageList_AddIcon($hImage, @SystemDir & "\" & $sDLLName, $iBilder,True)
    $iBilder += 1
    Until $iError <= 0
    $iCount = _GUIImageList_GetImageCount($hImage)
    Return $iCount
    EndFunc ;==>_LoadIcons

    [/autoit]

    bis jetzt bekomme ich die Progressbar nicht zu sehen, aber das sollte ich auch noch finden,

    mfg autoBert