ImageList für ListView

  • Hi,

    ich möchte in einer ListView Tabelle Icons anzeigen lassen.

    Mein Script (grob die wichtigesten Dinge):

    Spoiler anzeigen
    [autoit]


    $ListView1 = GUICtrlCreateListView("A|B|C|D", 216, 48, 385, 273)

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

    $hImage = _GUIImageList_Create(18, 18, 5, 3)
    _GUIImageList_AddIcon($hImage, "C:\Users\....\add.ico")
    _GUIImageList_AddIcon($hImage, "C:\Users\....\new.ico")
    _GUIImageList_AddIcon($hImage, "C:\Users\....\false.ico")

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

    ;später...
    _GUICtrlListView_SetImageList($ListView1,$hImage)

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

    Ich möchte nach einer gewissen Zeit das Icon in der ListView setzen. Nur bei _GUICtrlListView_SetImageList($ListView1,$hImage) kann man ja nichts einstellen über die Subitems usw.. ich steh gerade auf dem Schlauch -.-

    Gleich noch eine Frage nebenher: Wie macht man _GUICtrlListView_SetImageList($ListView1,$hImage) -> soll z.B. false.ico sein?


    Ich hoffe ihr habt meine Frage verstanden und könnt mir helfen .. vielen Dank schonmal,

    Jautois

    3 Mal editiert, zuletzt von Jautois (14. November 2008 um 14:56)

  • Mit _GUICtrlListView_SetItemImage () kann man doch nur so billige, vergrützte farbkästchen in einen Listview einbaunen.. ich meinte eigentlich das man Icons z.B. in Spalte 1 Sub 2 einsetzen kann.

    Naja mal schaun, vllt finde ich ja noch was ;) Danke trotzdem


    Edit: Omg! Es war GUICtrlSetImage() was ich gesucht habe -.- .. jedoch kann man da nirgends einstellen in welcher spalte das Icon angezeigt werden soll ... wisst ihr vllt weiter?

    Einmal editiert, zuletzt von Jautois (14. November 2008 um 14:07)

  • Das geht mit:
    _GUICtrlListView_SetExtendedListViewStyle($hListView,$LVS_EX_SUBITEMIMAGES)
    $IMGList = _GUIImageList_Create()
    _GUICtrlListView_SetImageList($hListView,$IMGList)
    $Image = _GUIImageList_AddIcon()
    _GUICtrlListView_SetItemImage($hListView,$Item,$Image,$SubItem)
    (so in etwa... genauer stehts in der Hilfe bei _GUICtrlListView_SetItemImage.)

  • Hey danke!

    Nur leider kapier ich von der Funktion leider nichts bzw wie ich sie zu benutzen habe..

    Spoiler anzeigen
    [autoit]

    Global Const $tagLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;" & _ "int Indent;int GroupID;int Columns;ptr pColumns"

    [/autoit]


    Edit: Thx prograndy! Damit klappts super .. Danke!

    2 Mal editiert, zuletzt von Jautois (14. November 2008 um 14:32)

  • Hab gier noch ein Bsp, wie man auch den Index von GUICtrlCreateListView-Items finden kann :)

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>

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

    Opt('MustDeclareVars', 1)

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

    $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]

    _Main()

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

    Func _Main()
    Local $hImage, $hListView, $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)

    GUICreate("ListView Set Item Image", 400, 300)
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, $exStyles)
    GUISetState()

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

    ; Load images
    $hImage = _GUIImageList_Create(16,16,0,1)
    _GUIImageList_AddIcon($hImage,@SystemDir&"\shell32.dll",10)
    _GUIImageList_AddIcon($hImage,@SystemDir&"\shell32.dll",13 )
    _GUIImageList_AddIcon($hImage,@SystemDir&"\shell32.dll",24 )
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_AddColumn($hListView, "Column 1", 100)
    _GUICtrlListView_AddColumn($hListView, "Column 2", 100)
    _GUICtrlListView_AddColumn($hListView, "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, 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2, 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1, 2)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)

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

    ; Set item 1, subitem 1 image
    _GUICtrlListView_SetItemImage($hListView, 1, 1, 1)
    MsgBox(4160, "Information", "Item 1, SubItem 1 Image: " & _GUICtrlListView_GetItemImage($hListView, 1, 1))

    Local $Item = GUICtrlCreateListViewItem("test|image|eintrag",$hListView)
    Local $IconIndex = _GUIImageList_AddIcon($hImage,@SystemDir&"\shell32.dll",32 )
    Local $Index = _GUICtrlListView_GetItemIndexByID($hListView,$Item)
    _GUICtrlListView_SetItemImage($hListView, $Index, $IconIndex, 1)

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

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

    ;===============================================================================
    ;
    ; Function Name: _GUICtrlListView_GetItemIndexByID
    ; Description:: Gibt den Index eines ListVIewItems zurück, das mit GUICtrlCreateListViewItem erstellt wurde
    ; Parameter(s): $hListView - die ListView
    ; $ID - die Item ID
    ; Requirement(s): GUIListView.au3
    ; Return Value(s): Erfolg: der Index
    ; Fehler: -1
    ; Author(s): prog@ndy
    ;
    ;===============================================================================
    ;
    Func _GUICtrlListView_GetItemIndexByID($hListView,$ID)
    If GUICtrlGetHandle($hListView) <>0 Then $hListView = GUICtrlGetHandle($hListView)
    For $i = 0 To _GUICtrlListView_GetItemCount($hListView)-1
    If _GUICtrlListView_GetItemParam($hListView,$i) == $ID Then Return $i
    Next
    Return -1
    EndFunc

    [/autoit]