_GUICtrlListView_GetItemChecked bzw. _GUICtrlListView_GetItemSelected UND GUICtrlCreateListView

  • Habe folgendes Problem bei folgendem Script:

    Script:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=D:\AutoIT\icon.ico
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseAnsi=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    ; Dank an das AutoIt Forum hier Andy und alle die geholfen haben!!!
    #include <GuiListView.au3>
    #include <ListBoxConstants.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $aIn[1]

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

    Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE, $LBS_EXTENDEDSEL)
    Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_TRACKSELECT)

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

    _FileReadToArray("_inhalt2.txt", $aIn) ; hier angepsst
    For $i = 1 To $aIn[0]
    $aIn[$i] = StringReplace(StringStripWS($aIn[$i], 7), "|", "|", 5) ; hier angepsst
    Next
    _FileWriteFromArray("inhalt2_out.txt", $aIn, 2) ; hier angepsst

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

    GUICreate("listview items", 1250, 530, 10, 10, -1) ; hier angepsst

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

    $listview = GUICtrlCreateListView($aIn[1], 10, 10, 1230, 510, $iExWindowStyle, $iExListViewStyle) ; hier angepsst
    _GUICtrlListView_SetExtendedListViewStyle($listview, $iExListViewStyle)

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

    $context = GUICtrlCreateContextMenu($listview) ;contextmenu, rechtsklick zum kopieren
    $item1 = GUICtrlCreateMenuItem("Kopieren nach...", $context)
    ;$item2 = GUICtrlCreateMenuItem("Markierte Titel aus der Liste löschen", $context)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIClose")
    ; GUICtrlSetOnEvent($item2, "_Delete")
    GUICtrlSetOnEvent($item1, "_kopieren")
    GUICtrlSetOnEvent($listview, "List1Click")
    _GUICtrlListView_RegisterSortCallBack($listview, True, True) ;sortierfunktion einschalten

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

    For $i = 2 To $aIn[0] ; bei Index 2 starten, dann ist die erste Zeile weg
    $item1 = GUICtrlCreateListViewItem($aIn[$i], $listview)
    Next
    GUISetState()

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

    While 1
    Sleep(50)
    WEnd

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

    Func _kopieren()
    DirCreate(@ScriptDir & "\auswahlliste")

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

    MsgBox(0,"Kopiervorgang startet", "Kopiervorgang startet. Bitte haben Sie ein wenig Geduld.")
    For $iIndex = 0 To _GUICtrlListView_GetItemCount($listview) ;nacheinander die listenitems aufrufen
    If _GUICtrlListView_GetItemChecked($listview, $iIndex) Or _GUICtrlListView_GetItemSelected($listview, $iIndex) Then ;wenn angehakt,dann kopieren
    $titel = _GUICtrlListView_GetItem($listview, $iIndex, 1) ;schau mal in die Hilfe....
    $pfad = _GUICtrlListView_GetItem($listview, $iIndex, 8) ;schau mal in die Hilfe....
    ;_arraydisplay($titel)
    FileCopy($pfad[3], @ScriptDir & "\auswahlliste\" & $titel[3] & ".mp3")
    ;MsgBox(0, "Kopieren: " & $titel[3], $pfad[3])

    EndIf
    Next
    MsgBox(0,"Kopiervorgang erfolgreich", "Kopiervorgang erfolgreich.")
    EndFunc ;==>_kopieren

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

    Func List1Click()
    _GUICtrlListView_SortItems(GUICtrlGetHandle($listview), GUICtrlGetState($listview))
    EndFunc ;==>List1Click

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

    Func _bearbeiten()
    _GUICtrlListView_BeginUpdate($listview)
    _GUICtrlListView_EndUpdate($listview)
    EndFunc ;==>_bearbeiten

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

    ;deaktiviert
    #cs
    Func _delete() ;zeilen in der liste löschen
    If MsgBox(262144 + 32 + 4, "", "Markierte bzw. angehakte Zeilen aus der Liste löschen? ") = 6 Then
    _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($listview))
    EndIf
    EndFunc ;==>_delete
    #ce

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

    Func _GUIClose()
    _GUICtrlListView_UnRegisterSortCallBack($listview)
    Exit
    EndFunc ;==>_GUIClose

    [/autoit]

    Bild:
    autoit.de/wcf/attachment/5831/

    Problem bzw. Frage zur Hilfestellung:

    Im Bild als 1: Frage ich mich, wie ich alle grüne Markierungen auf einmal weg bekomme. Am liebsten re. Maustaste und "Markierungen löschen".

    Im Bild als 2: Wie bekomme ich die beiden ersten Spalten auf eine höhere Breitelänge?


    Ui, hoffe ihr versteht mein Problem.

    Vielen Dank schon jetzt an dieser Stelle für die Hilfe.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=D:\AutoIT\icon.ico
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseAnsi=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    ; Dank an das AutoIt Forum hier Andy und alle die geholfen haben!!!
    #include <GuiListView.au3>
    #include <ListBoxConstants.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $aIn[1]

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

    Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE, $LBS_EXTENDEDSEL)
    Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_TRACKSELECT)

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

    _FileReadToArray("_inhalt2.txt", $aIn) ; hier angepsst
    For $i = 1 To $aIn[0]
    $aIn[$i] = StringReplace(StringStripWS($aIn[$i], 7), "|", "|", 5) ; hier angepsst
    Next
    _FileWriteFromArray("inhalt2_out.txt", $aIn, 2) ; hier angepsst

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

    GUICreate("listview items", 1250, 530, 10, 10, -1) ; hier angepsst

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

    $listview = GUICtrlCreateListView($aIn[1], 10, 10, 1230, 510, $iExWindowStyle, $iExListViewStyle) ; hier angepsst
    _GUICtrlListView_SetExtendedListViewStyle($listview, $iExListViewStyle)

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

    $context = GUICtrlCreateContextMenu($listview) ;contextmenu, rechtsklick zum kopieren
    $item1 = GUICtrlCreateMenuItem("Kopieren nach...", $context)
    GUICtrlSetOnEvent($item1, "_kopieren")
    $item2 = GUICtrlCreateMenuItem("Markierte Titel aus der Liste löschen", $context)
    GUICtrlSetOnEvent($item2, "_deselect")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIClose")
    ; GUICtrlSetOnEvent($item2, "_Delete")
    GUICtrlSetOnEvent($listview, "List1Click")
    _GUICtrlListView_RegisterSortCallBack($listview, True, True) ;sortierfunktion einschalten

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

    For $i = 2 To $aIn[0] ; bei Index 2 starten, dann ist die erste Zeile weg
    $item1 = GUICtrlCreateListViewItem($aIn[$i], $listview)
    Next

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

    For $i = 0 To _GUICtrlListView_GetColumnCount($listview) -1
    _GUICtrlListView_SetColumnWidth($listview, $i, $LVSCW_AUTOSIZE)
    Next

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

    GUISetState()

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

    While 1
    Sleep(50)
    WEnd

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

    Func _deselect()
    For $i = 0 To _GUICtrlListView_GetItemCount($listview) -1
    _GUICtrlListView_SetItemChecked($listview, $i, 0)
    Next
    EndFunc

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

    Func _kopieren()
    DirCreate(@ScriptDir & "\auswahlliste")

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

    MsgBox(0,"Kopiervorgang startet", "Kopiervorgang startet. Bitte haben Sie ein wenig Geduld.")
    For $iIndex = 0 To _GUICtrlListView_GetItemCount($listview) ;nacheinander die listenitems aufrufen
    If _GUICtrlListView_GetItemChecked($listview, $iIndex) Or _GUICtrlListView_GetItemSelected($listview, $iIndex) Then ;wenn angehakt,dann kopieren
    $titel = _GUICtrlListView_GetItem($listview, $iIndex, 1) ;schau mal in die Hilfe....
    $pfad = _GUICtrlListView_GetItem($listview, $iIndex, 8) ;schau mal in die Hilfe....
    ;_arraydisplay($titel)
    FileCopy($pfad[3], @ScriptDir & "\auswahlliste\" & $titel[3] & ".mp3")
    ;MsgBox(0, "Kopieren: " & $titel[3], $pfad[3])

    EndIf
    Next
    MsgBox(0,"Kopiervorgang erfolgreich", "Kopiervorgang erfolgreich.")
    EndFunc ;==>_kopieren

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

    Func List1Click()
    _GUICtrlListView_SortItems(GUICtrlGetHandle($listview), GUICtrlGetState($listview))
    EndFunc ;==>List1Click

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

    Func _bearbeiten()
    _GUICtrlListView_BeginUpdate($listview)
    _GUICtrlListView_EndUpdate($listview)
    EndFunc ;==>_bearbeiten

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

    ;deaktiviert
    #cs
    Func _delete() ;zeilen in der liste löschen
    If MsgBox(262144 + 32 + 4, "", "Markierte bzw. angehakte Zeilen aus der Liste löschen? ") = 6 Then
    _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($listview))
    EndIf
    EndFunc ;==>_delete
    #ce

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

    Func _GUIClose()
    _GUICtrlListView_UnRegisterSortCallBack($listview)
    Exit
    EndFunc ;==>_GUIClose

    [/autoit]
  • Spoiler anzeigen
    [autoit]


    Func _GUICtrlListView_GetCheckedItemsTextArray($hListView)
    Local $aCheckedItems = _GUICtrlListView_GetCheckedIndices($hListView)
    Local $iCheckedCount = UBound($aCheckedItems)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    Local $iColCount = _GUICtrlListView_GetColumnCount($hListView)
    Local $aCheckedItemsText[$iCheckedCount][$iColCount], $aTemp
    For $i = 0 To $iCheckedCount - 1
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView, $aCheckedItems[$i])
    For $j = 1 To $aTemp[0]
    $aCheckedItemsText[$i][$j-1] = $aTemp[$j]
    Next
    Next
    Return $aCheckedItemsText
    EndFunc ;==>_GUICtrlListView_GetCheckedItemTextArray

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

    Func _GUICtrlListView_GetCheckedIndices($hListView)
    Local $iCount = _GUICtrlListView_GetItemCount($hListView)
    Local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    Local $aCheckedItems[$iCheckedCount]
    $iCheckedCount = 0
    For $i = 0 To $iCount - 1
    If _GUICtrlListView_GetItemChecked($hListView, $i) Then
    $aCheckedItems[$iCheckedCount] = $i
    $iCheckedCount += 1
    EndIf
    Next
    Return $aCheckedItems
    EndFunc ;==>_GUICtrlListView_GetCheckedIndices

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

    Func _GUICtrlListView_GetCheckedCount($hListView)
    Local $iCount = _GUICtrlListView_GetItemCount($hListView), $iCheckedCount = 0
    If $iCount = 0 Then Return SetError(1, 0, 0)
    For $i = 0 To $iCount - 1
    $iCheckedCount += _GUICtrlListView_GetItemChecked($hListView, $i)
    Next
    Return $iCheckedCount
    EndFunc ;==>_GUICtrlListView_GetCheckedCount

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

    Func _SetAllcheckedItems() ;Status bei angehakten Items ändern
    local $aCheckedItemsText = _GUICtrlListView_GetCheckedItemsTextArray($hListView)
    local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    For $i = 0 to $iCheckedCount -1
    if $aCheckedItemsText[$i][3] = $done then ;Beispiel aus meinem Skript
    _GUICtrlListView_SetItemText($hLVHandle,$aCheckedIndices[$i], $todo, 3)
    ElseIf $aCheckedItemsText[$i][3] = $todo then ;Beispiel aus meinem Skript
    _GUICtrlListView_SetItemText($hLVHandle,$aCheckedIndices[$i], $done, 3)
    Endif
    Next
    EndFunc

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

    Func _DeleteAllcheckedItems() ;alle angehakte Items löschen
    local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    for $i = $iCheckedCount - 1 To 0 Step -1
    _GUICtrlListView_DeleteItem($hLVHandle, $aCheckedIndices[$i])
    next
    EndFunc

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

    Func Checktoggle() ; Check / Uncheck all
    local $checked = _GUICtrlListView_GetCheckedCount($hListView)
    local $all = _GUICtrlListView_GetItemCount($hListView)
    if $checked = $all then
    _GUICtrlListView_SetItemChecked($hListView, -1, False)
    else
    _GUICtrlListView_SetItemChecked($hListView, -1, True)
    endif
    Endfunc

    [/autoit]

    Hier mal eine Funktionssammlung (ich meine Oscar hat die mal gepostet) für angehakte Items und 3 Beispiele was man damit machen kann.