Icon in ListView Spalte0 unterdrücken

  • Tach zusammen,

    Hab mich mal gerade an Listviews mit Icons probiert. Hintergrund ist der, dass für alle Dateien in einem Ordner das passende Icon n der Liste angezeigt wird. Aber egal was ich mache, es wird immer ein Icon in der Spalte 0 angezeigt. Hier mal ein Bsp.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIEx.au3>
    #include <WindowsConstants.au3>

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

    $GUI = GUICreate("tt", @DesktopWidth - 225, @DesktopHeight - 100, 5, 5)
    GUISetBkColor(0x000000, $GUI)

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

    $listview1 = GUICtrlCreateListView("Nr|Name|Erweit.", 5, 50, @DesktopWidth - 225 - 10, @DesktopHeight - 100 - 120)
    $hImageList = _GUIImageList_Create(16, 16, 6)
    _GUICtrlListView_SetImageList($listview1, $hImageList, 1)
    _GUICtrlListView_SetExtendedListViewStyle($listview1, $LVS_EX_SUBITEMIMAGES)

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

    $nr = 1
    $Name = "test"
    $Erweiterung = ".au3"

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

    $hIcon = _WinAPI_ShellExtractAssociatedIcon($Erweiterung, 1)

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

    If @error Then MsgBox(0, "", @error)
    _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon)

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

    _GUICtrlListView_AddItem($listview1, $nr) ;Zeile 0, SubItem 1
    _GUICtrlListView_AddSubItem($listview1, 0, $Name, 1);Zeile 0, SubItem 2
    _GUICtrlListView_AddSubItem($listview1, 0, $Erweiterung, 2, 0);Zeile 0, SubItem 3

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

    _WinAPI_DestroyIcon($hIcon)

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Was mache ich da falsch ?
    Oder ist das so gewollt?

    Benötigte Dateien hab ich mal angehangen

    Lg
    MrB

  • Hallo MrB,

    ich würde es so lösen (ist aber nur ein Workaround):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIEx.au3>
    #include <WindowsConstants.au3>

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

    $GUI = GUICreate("tt", @DesktopWidth - 225, @DesktopHeight - 100, 5, 5)
    GUISetBkColor(0x000000, $GUI)

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

    $listview1 = GUICtrlCreateListView("Nr|Name|Erweit.", 5, 50, @DesktopWidth - 225 - 10, @DesktopHeight - 100 - 120)
    $hImageList = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImageList, @SystemDir & "\Shell32.dll", 49,True)
    _GUIImageList_AddIcon($hImageList, @SystemDir & "\Shell32.dll", 49,True)

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

    _GUICtrlListView_SetImageList($listview1, $hImageList, 1)
    _GUICtrlListView_SetExtendedListViewStyle($listview1, $LVS_EX_SUBITEMIMAGES)

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

    $nr = 1
    $Name = "test"
    $Erweiterung = ".au3"

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

    $hIcon = _WinAPI_ShellExtractAssociatedIcon($Erweiterung, 1)

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

    If @error Then MsgBox(0, "", @error)
    _GUIImageList_ReplaceIcon($hImageList, 1, $hIcon)

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

    _GUICtrlListView_AddItem($listview1, $nr) ;Zeile 0, SubItem 1
    _GUICtrlListView_AddSubItem($listview1, 0, $Name, 1,1);Zeile 0, SubItem 2
    _GUICtrlListView_AddSubItem($listview1, 0, $Erweiterung, 2, 1);Zeile 0, SubItem 3

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

    _WinAPI_DestroyIcon($hIcon)

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    gestestet unter Win XP SP3, falls es bei dir wieder Erwarten nicht funktionieren sollte (da anderes BS) such dir mit Hilfe von [Beispiel] Icons von System-DLLs in LV darstellen eine DLL in der ein Icon nicht angezeigt wird. Den Namen und die Nr verwendest du dann in Zeile 14 und 15 anstelle von shell32.dll und der Nr.49,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (7. Januar 2012 um 17:46)