Listview, Icons und eine .dll

  • Hey,

    folgendes Problem:
    In einer .dll sind verschiedene Icons gespeichert, einige davon sollen in einem Listview angezeigt werden.

    Derzeit mache ich das so:

    Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <Constants.au3>
    #include <ScreenCapture.au3>
    Opt('MustDeclareVars', 1)
    Opt('CaretCoordMode', 0)
    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

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

    Global $GUI, $hListView, $msg, $hImage, $aImage, $test2, $load, $ilist, $try
    Global $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER)

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

    $GUI = GUICreate("Gui", 800, 650, -1, -1)

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

    ;=========================================================================================================
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268); _GUICtrlListView_Create($GUI, "", 50, 50, 550, 500, $LVS_NOCOLUMNHEADER, -1, True) ; Last option Calls CoInitializeEx
    ;=========================================================================================================
    Global $HLV = GUICtrlGetHandle($hListView)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, $exStyles)

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

    $hImage = _GUIImageList_Create()
    $test2 = _GUIImageList_AddIcon($hImage, "Pfad zur .dll", 0)

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

    $ilist = _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)

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

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch

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

    WEnd

    [/autoit]


    D.h. jedes Icon wird einzeln zur Imagelist hinzugefügt.
    Kann man auch einfach alle Icons automatisch aus der .dll in die Liste laden?

    Gruß nuts

    edit \
    Idee 8o

    [autoit]


    $hImage = _GUIImageList_Create()
    $count = _WinAPI_ExtractIconEx("Pfad zur .dll", -1, 0, 0, 0)
    for $i = 0 to $count -1
    _GUIImageList_AddIcon($hImage, "Pfad zur .dll", $i)
    next

    [/autoit]

    2 Mal editiert, zuletzt von nuts (30. September 2009 um 18:10)

  • Hallo nuts,

    nimm doch einfach eine Schleife:

    [autoit]

    $hImage = _GUIImageList_Create()
    for $i = 0 to 99
    _GUIImageList_AddIcon($hImage, "Pfad zur .dll", $i)
    $ilist = _GUICtrlListView_SetImageList($hListView, $hImage, 1)
    next $i

    [/autoit]


    oder fallst du _GUIImageList_Add verwenden kannst (BildTyp?) und auch noch alle gleich breit sind, kannst du es damit versuchen

    mfg (Auto)Bert