Drag&Drop vom Treeviewitem in eine Liste

  • Hallo, liebe Autoit-Gemeinde.

    Ich nage seit Stunden schon an der Funktion aus einem Treeview das letzte Unteritem(1-4) in eine Liste verschieben zu können. Bisher habe ich ein Listview-Steuerelement und einen Tree mit Treviewitem und mehreren Unteritems.
    Habe mir auch schon 5 Quelltexte mit ähnlichem Prinzip angesehen, aber ich komme dennoch nicht weiter...


    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    Global $exit, $ItemA, $ItemB, $Item1, $Item2, $Item3, $Item4
    Example()
    Func Example()

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

    Guicreate("Test", 400, 250, $WS_EX_ACCEPTFILES)
    $tree = guictrlcreatetreeview(300, 10, 100, 100)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $ItemA = Guictrlcreatetreeviewitem("ItemA", $tree)
    $ItemB = Guictrlcreatetreeviewitem("ItemB", $tree)
    $Item1 = Guictrlcreatetreeviewitem("Item1", $ItemA)
    $Item2 = Guictrlcreatetreeviewitem("Item2", $ItemA)
    $Item3 = Guictrlcreatetreeviewitem("Item3", $ItemB)
    $Item4 = Guictrlcreatetreeviewitem("Item4", $ItemB)
    Guictrlcreatelistview("", 10, 10, 200, 200)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

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

    while(1)
    Sleep(1000)
    WEnd
    EndFunc ;==>_Main

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

    Func OnExit()
    If @GUI_CtrlId = $Exit Then
    ;MsgBox(0, "You clicked on", "Exit")
    Else
    ;MsgBox(0, "You clicked on", "Close")
    EndIf
    Exit
    EndFunc ;==>OnExit

    [/autoit]

    Falls jemand zu helfen weiß, wäre ich sehr sehr dankbar! :)

  • okay, mh... gibt's eine Lösungsidee? :S

    Ich dachte nur, wenn man Dateien in eine Liste ziehen kann, kann's ja nicht so schwer werden, Items in eine Liste zu schieben...

    • Offizieller Beitrag

    Mal eine rumgetrickste "Lösung":

    Spoiler anzeigen
    [autoit]


    #include <GuiTreeView.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    Global $exit, $ItemA, $ItemB, $Item1, $Item2, $Item3, $Item4, $DragItem, $tree, $hGui, $hListView
    Example()
    Func Example()


    $hGui = Guicreate("Test", 400, 250, -1, -1, Default, $WS_EX_ACCEPTFILES)
    $tree = guictrlcreatetreeview(300, 10, 100, 100)
    ;~ GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $ItemA = Guictrlcreatetreeviewitem("ItemA", $tree)
    $ItemB = Guictrlcreatetreeviewitem("ItemB", $tree)
    $Item1 = Guictrlcreatetreeviewitem("Item1", $ItemA)
    $Item2 = Guictrlcreatetreeviewitem("Item2", $ItemA)
    $Item3 = Guictrlcreatetreeviewitem("Item3", $ItemB)
    $Item4 = Guictrlcreatetreeviewitem("Item4", $ItemB)
    $hListView = Guictrlcreatelistview("Test", 10, 10, 200, 200)
    ;~ GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "MDown")
    GUISetOnEvent($GUI_EVENT_PRIMARYUP, "MUp")

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

    while(1)
    Sleep(1000)
    WEnd
    EndFunc ;==>_Main

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

    Func MUp()
    Local $aInfo = GUIGetCursorInfo($hGui)
    If $aInfo[4] = $hListView And $DragItem <> -1 Then
    GUICtrlCreateListViewItem(_GUICtrlTreeView_GetText($tree, $DragItem), $hListView)
    EndIf
    $DragItem = -1
    EndFunc

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

    Func MDown()
    Local $aInfo = GUIGetCursorInfo($hGui)
    If $aInfo[4] = $tree Then
    $DragItem = _GUICtrlTreeView_GetSelection($tree)
    Else
    $DragItem = -1
    EndIf
    EndFunc

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

    Func OnExit()
    If @GUI_CtrlId = $Exit Then
    ;MsgBox(0, "You clicked on", "Exit")
    Else
    ;MsgBox(0, "You clicked on", "Close")
    EndIf
    Exit
    EndFunc ;==>OnExit

    [/autoit]

    Edit: War noch ein kleiner Fehler drin. Behoben!