Problem mit _GUICtrlListview_AddItem

  • Erstmal guten Abend und Frohe Wheinachten euch allen!!

    Also ich hab vollgendes Problem: Ich erstelle mir grad ein Script mit dem ich meine Musik verwalten möchte, soweit so gut, dachte mir halt um eine Playlist erstellen zu können wäre es hilfreich wenn man 2 Listviews hat, in denen man navigieren und Dateien verschieben / kopieren etc. kann.
    Das Problem liegt allerdings bei den Listviews, ich erstelle die Items mit _GUICtrlListView_AddItem, da ich damit auch Icons anzeigen lassen kann, was sehr nützlcih ist um Ordner und Dateien auseinander zu halten, naja genung eschwafelt jetzt^^, das Problem ist allederdings, dass die Funktion nur einen Indexwert zurückliefert und kein CtrlHandle, somit kann ich einen Klick auf ein Item nicht lokalisieren und dementsprechende Aktion durchführen. Muss ich mir da sowas mit GUIRegisterMsg() zusammenbasteln(von dem ich keinen schimmer habe aber es mal für _GUICtrlToolbar_Create verwenden musste xD)

    Währe für ein Bsp-Script sehr dankbar ^^

    Frohe Wheinnachten
    DJ

    • Offizieller Beitrag

    Edit
    So, ich habe meine erste Lösung verworfen und dir hier mal ein Funktionsbeispiel erstellt ohne _GUICtrlListview_AddItem:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstants.au3>

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

    Global $arPlaylist[10][2] = [ _
    ['Ordner1', 4], _
    ['File1', 41], _
    ['File2', 41], _
    ['File3', 41], _
    ['File4', 41], _
    ['File5', 41], _
    ['Ordner2', 4], _
    ['File1', 41], _
    ['File2', 41], _
    ['File3', 41]]
    Global $ListView
    Global $arItem[UBound($arPlaylist)]

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 456, 320, 193, 115)
    $ListView = GUICtrlCreateListView('ListView', 36, 22, 393, 277, BitOR($LVS_SMALLICON,$LVS_SINGLESEL, _
    $LVS_SHOWSELALWAYS))
    For $i = 0 To UBound($arPlaylist) -1
    $arItem[$i] = GUICtrlCreateListViewItem($arPlaylist[$i][0], $ListView)
    GUICtrlSetImage($arItem[$i], "shell32.dll", $arPlaylist[$i][1]) ; "shell32.dll",4-Ordner; 41-Musik
    Next
    GUIRegisterMsg($WM_NOTIFY, "Set_ListView")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    Func Set_ListView ($CtrlHandle, $MsgID, $CtrlID, $LPNMHDR)
    If $CtrlID = $ListView Then
    Local $NMHDR, $Event
    $NMHDR = DllStructCreate("int;int;int", $LPNMHDR)
    If @Error Then Return
    $Event = DllStructGetData($NMHDR, 3)
    If $Event = $NM_DBLCLK Then
    Local $ItemString = $arPlaylist[_GUICtrlListView_GetSelectedIndices($ListView)][0]
    If Not $ItemString = '' Then
    ; DOPPELKLICK auf Eintrag
    MsgBox(0, 'Doppelklick', $ItemString)
    EndIf
    EndIf
    EndIf
    $LPNMHDR = 0
    EndFunc

    [/autoit]
  • Hay Super BugFix

    Deinen ersten Lösungansatz bzw. Idee, da hab ich nicht so durchgeschaut ^^
    Aber das was du mir jetzt geschickt hast ist suupi!!!

    Man(Ich) sieht den Wald ma wieder vor lauter Bäumen nicht xD
    GUICtrlSetImage natürlich, warum einfach denken wenns auch schwer geht(wusste im übrigen auch garnet, dass das damit geht -.-)

    Nja noch einen schönen 2. Wheinachtsabend wünsch ich euch

    Bye Bye
    dj