ListView Drag And Drop auch nach oben und unten möglich?

  • Hallo
    Ist es auch möglich Items innerhalb eines ListViews mit der Maus per Drag and Drop nach oben oder unten zu verschieben?
    Danke, wenn ihr mir weiterhelfen könnt.

  • Danke, aber ich bin auf der Suche nach einer Möglichkeit um ein Item mit der Maus in der Liste zu verschieben

  • Kleines Update, da ich selbst so eine Funktion benötigte: Das Beispiel in dem von Douky angesprochenen Post funktioniert nicht mehr richtig, ich habe das mal korrigiert. Außerdem kann man das Script nun, da ich noch $GUI_EVENT_PRIMARYUP hinzugefügt habe, während des Verschiebens auf andere Events reagieren. Allerdings benötigt diese Variante drei globale Variablen, zusätzlich zum ListView.

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    Global $ListView, $iFrom, $iTo, $fTracking = False

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

    $GUI = GUICreate("Test-GUI", 500, 300, -1, -1, -1, $WS_EX_ACCEPTFILES)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_OnGuiEvent_Close")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_OnGuiEvent_PrimaryDown")
    GUISetOnEvent($GUI_EVENT_PRIMARYUP, "_OnGuiEvent_PrimaryUp")
    $ListView = GUICtrlCreateListView("Eintrag", 10, 10, 480, 280)
    _GUICtrlListView_SetColumnWidth($ListView, 0, 475)

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

    For $i = 1 To 10
    $Item = GUICtrlCreateListViewItem("Eintrag " & $i, $ListView)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    ; ====================================================================

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

    Func _OnGuiEvent_Close()
    Exit
    EndFunc ;==>raus

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

    Func _OnGuiEvent_PrimaryDown()
    Local $aCursor = GUIGetCursorInfo($GUI)

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

    If $aCursor[4] = $ListView Then
    $fTracking = True
    $iFrom = _GUICtrlListView_GetHotItem($ListView)
    EndIf
    EndFunc ;==>_MoveListViewItem

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

    Func _OnGuiEvent_PrimaryUp()
    Local $aCursor = GUIGetCursorInfo($GUI)
    If $aCursor[4] = $ListView And $fTracking Then
    $iTo = _GUICtrlListView_GetHotItem($ListView)

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

    If $iFrom <> $iTo Then
    _MoveLVItem($iFrom, $iTo - $iFrom, GUICtrlGetHandle($ListView))
    _GUICtrlListView_SetSelectionMark($ListView, $iTo)
    EndIf
    EndIf
    $fTracking = False
    EndFunc

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Funktion _MoveLVItem($ItemIndex, $StepWidth, $hLV)
    ;
    ; Beschreibung verschiebt per Index angegebenen Eintrag eines ListViewCtrl um eine Anzahl Positionen
    ;
    ; Parameter $ItemIndex: Index der Zeile
    ; $StepWidth: Anzahl Zeilen um die der Eintrag verschoben wird (negative Zahl - aufwärts)
    ; $hLV: ListView ID
    ;
    ; Erfordernisse #include <GuiListView.au3>
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    #include <GuiListView.au3>
    Func _MoveLVItem($ItemIndex, $StepWidth, $hLV)
    If ($ItemIndex + $StepWidth) < 0 Or _
    ($ItemIndex + $StepWidth) > _GUICtrlListView_GetItemCount($hLV) - 1 Then Return SetError(1)

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

    Local $txt2skip = _GUICtrlListView_GetItemText($hLV, $ItemIndex)

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

    If $StepWidth > 0 Then
    _GUICtrlListView_InsertItem($hLV, $txt2skip, $ItemIndex + $StepWidth + 1)
    _GUICtrlListView_DeleteItem($hLV, $ItemIndex)
    Else
    _GUICtrlListView_InsertItem($hLV, $txt2skip, $ItemIndex + $StepWidth)
    _GUICtrlListView_DeleteItem($hLV, $ItemIndex + 1)
    EndIf

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

    Return -1
    EndFunc ;==>_MoveLVItem

    [/autoit]

    Edit: https://autoit.de/index.php?page…7938#post207938

    Einmal editiert, zuletzt von FichteFoll (6. Februar 2011 um 11:03)