Bilder verschieben per Drag and Drop

  • Hallo,

    ich möchte alle Bilder aus einem Verzeichnis in eine Seitenleiste laden (vergleiche Screenshot).

    [Blockierte Grafik: http://img5.fotos-hochladen.net/thumbnail/tabellebilderp16mx43tzg_thumb.jpg]

    Ein Einzelbild zu laden und anzuzeigen habe ich raustüffeln können ... nach über 5 Stunden ;) und Anlehnung eines Scripts von autobert (glaube ich) - harte Nuss, erst sehr spät gefunden.


    Per Drag and Drop sollen diese Fotos (unterschiedliche Anzahl pro Verzeichnis, daher z.B. in der rechten Seitenleisten in 2 oder 3 Spalten anzeigen.
    Die Bildschirmoberfläche kann in Desktopgröße sein (braucht viel Platz).

    4 Probleme sehe ich bei dieser Variante "Bilder zu sortieren" (sollen später in der Reihenfolge weiter bearbeitet werden).

    (1) Wie erzeuge ich die Bilder in 2 Spalten und zeige diese dann in der rechten Spalte an?
    (Gibt es eine bessere grundlegende Möglichkeit für die Bildanzeige als obiges Entwurfs-Script oder ist GDIPlus die erste Wahl?)

    (2) Wie kann ich die Bilder per Drag / Drop von der Spalte in das Tabellenraster ziehen und wieder zurück in die Spalte?
    Ein Bild, welches per Drag / Drop verschoben wurde, verschwindet von ehemaligen Platz und erscheint auf dem neuen Platz.
    Kann man das auf einer Form unterbringen, oder sollte man dazu 2 Fenster verwenden (Tabelle und rechte SeitenSpalte)?

    Das Screenshot verdeutlicht das recht gut (auch wenn die Bilder dort nur symbolisch zu sehen sind - Doubletten sind zwar auf dem Screenshot, sollen im fertigen Script natürlich nicht sein).

    (3) Wie ermittle ich, wieviele Bilder in jeder Tabellenzeile zu sehen sind und wie kann ich die Dateinamen der Bilder einer Zeile speichern?

    (4) Wie speichere ich den aktuellen Status der Sortierung, so dass dieser wieder geladen werden kann.

    Hat jemand sowas schon mal gescriptet?

    Danke :)

    2 Mal editiert, zuletzt von AutoMit (20. März 2017 um 11:57)

  • Die Frage scheint zu komplex oder zu schwer zu sein.

    Ich reduziere mein Anliegen auf einen Punkt:

    (2) Wie kann ich die Bilder per Drag / Drop von der Spalte in das Tabellenraster ziehen und wieder zurück in die Spalte?
    Ein Bild, welches per Drag / Drop verschoben wurde, verschwindet von ehemaligen Platz und erscheint auf dem neuen Platz.

    Da ich Bilder bereits anzeigen konnte, kann ich weiter tüffteln, wenn ich sie per Drag / Drop verschieben kann.

    Ein schönes und sonniges Wochenende allen und Danke :)

    • Offizieller Beitrag

    Ich würde kein echtes Drag&Drop Verhalten probieren. Ein Bild ziehen (es bleibt also sichtbar, die Bewegung ist live) scheint mir etwas zu aufwändig.
    Ich würde so vorgehen:
    - Deiner Tabellenstruktur, die die Bilder anzeigt, liegt ein 2D-Array zugrunde. (Bild 2 in Zeile 2 = Index[1][1] - dort der kpl. Dateipfad
    - Klick auf ein Bild umrahmt es (das Bild ist markiert, über Klickposition erhältst du den Index)
    - Klick auf den Seitenstreifen - prüft ob in der Tabelle ein Bild markiert ist - JA: Anhand des Index ist Bilddatei bekannt, Bild kann im Seitenstreifen angezeigt werden und Dateipfad wird in Seitenstreifen-Array übernommen. Dann wird das Bild an Tabellenposition und im Tabellen-Array gelöscht
    - Ziehen von Seitenstreifen auf Tabelle: exakt entgegengesetzt

    • Offizieller Beitrag

    Hallo,

    Ist wohl noch ein bisschen zusätzliche Arbeit, aber schau dir mal die Funktionen _GUICtrlListView_DrawDragImage und _GUIImageList_BeginDrag an.
    Ich hab dir hier mal aus den beiden Funktionen und der Hilfe Datei was zusammen geschustert, leider sieht das je nach OS nicht besonders schön aus, aber damit kann man auf jeden Fall anfangen und es weiter optimieren:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>

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

    #Region Globals *************************************************************************
    Global $g_ahDragImageList, $g_hListView, $g_bDragging = False, $g_iLV_Height
    Global $g_aIndex[2] ; from and to

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

    Global Const $g_iDebugIt = 1

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

    #EndRegion Globals *************************************************************************

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

    Opt("WinTitleMatchMode", 2)

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

    Example()

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

    Func Example()
    Local Const $iImage_width = 64
    Local Const $iImage_height = 64
    Local $hImages, $hMain_GUI, $iIndex

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

    $hMain_GUI = GUICreate("GuiImageList Begin Drag", 225, 400)

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

    $g_hListView = _GUICtrlListView_Create($hMain_GUI, "Entry Name", 5, 75, 220, 280, -1, BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
    $g_iLV_Height = 280 - 75
    _GUICtrlListView_SetColumnWidth($g_hListView, 0, 100)
    _GUICtrlListView_SetColumnWidth($g_hListView, 1, 100)
    _GUICtrlListView_SetExtendedListViewStyle($g_hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
    ;------------------------------------------------------
    ; Using subitem images
    ;------------------------------------------------------
    _GUICtrlListView_SetExtendedListViewStyle($g_hListView, BitOR($LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_SUBITEMIMAGES))

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

    ;------------------------------------------------------
    ; create the image list
    ;------------------------------------------------------
    $hImages = _GUIImageList_Create($iImage_width, $iImage_height, 5, 1)
    For $x = 1 To 21
    _GUIImageList_AddIcon($hImages, @SystemDir & "\shell32.dll", $x, True)
    Next

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

    _GUICtrlListView_SetImageList($g_hListView, $hImages, $LVSIL_SMALL)

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

    ;------------------------------------------------------
    ;Register event functions
    ;------------------------------------------------------
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUIRegisterMsg($WM_LBUTTONUP, "WM_LBUTTONUP")
    GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSEMOVE")

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

    ;------------------------------------------------------
    ; add listview items with images
    ;------------------------------------------------------
    Local $y = 1
    For $x = 0 To 9
    $iIndex = _GUICtrlListView_AddItem($g_hListView, "", $y) ; handle, string, image index
    $y += 2
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1

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

    Switch GUIGetMsg()

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

    ;-----------------------------------------------------------------------------------------
    ;This case statement exits and updates code if needed
    Case $GUI_EVENT_CLOSE
    ExitLoop
    ;-----------------------------------------------------------------------------------------
    ;put all the misc. stuff here
    Case Else
    ;;;
    EndSwitch
    WEnd

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

    _GUIImageList_Destroy($hImages)
    GUIDelete()
    EndFunc ;==>Example

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

    #Region Item Function(s) **********************************************************************************************
    Func _LVInsertItem($i_FromItem, $i_ToItem)
    Local $iItem_state, $i_NewIndex
    Local $tStruct_LVITEM = DllStructCreate($tagLVITEM)
    Local $tStruct_String = DllStructCreate("wchar Buffer[4096]")

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

    ; Insert item into new position
    DllStructSetData($tStruct_LVITEM, "Mask", BitOR($LVIF_STATE, $LVIF_IMAGE, $LVIF_INDENT, $LVIF_PARAM, $LVIF_TEXT))
    DllStructSetData($tStruct_LVITEM, "StateMask", $LVIS_STATEIMAGEMASK)
    DllStructSetData($tStruct_LVITEM, "Item", $i_FromItem)
    DllStructSetData($tStruct_LVITEM, "SubItem", 0)
    DllStructSetData($tStruct_LVITEM, "TextMax", 4096)
    DllStructSetData($tStruct_LVITEM, "Text", DllStructGetPtr($tStruct_String))
    _GUICtrlListView_GetItemEx($g_hListView, $tStruct_LVITEM)
    If @error Then Return SetError(-1, -1, -1)
    $iItem_state = DllStructGetData($tStruct_LVITEM, "State")
    DllStructSetData($tStruct_LVITEM, "Item", $i_ToItem)
    $i_NewIndex = _GUICtrlListView_InsertItem($g_hListView, DllStructGetData($tStruct_String, "Buffer"), $i_ToItem, DllStructGetData($tStruct_LVITEM, "Image"))
    If @error Then Return SetError(-1, -1, -1)

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

    ; restore previous state
    _DebugPrint("$i_NewIndex = " & $i_NewIndex)
    DllStructSetData($tStruct_LVITEM, "Mask", $LVIF_STATE)
    DllStructSetData($tStruct_LVITEM, "Item", $i_NewIndex)
    DllStructSetData($tStruct_LVITEM, "State", $iItem_state)
    DllStructSetData($tStruct_LVITEM, "StateMask", $LVIS_STATEIMAGEMASK)
    _GUICtrlListView_SetItemState($g_hListView, $i_NewIndex, $iItem_state, $LVIS_STATEIMAGEMASK)
    If @error Then Return SetError(-1, -1, -1)
    Return $i_NewIndex
    EndFunc ;==>_LVInsertItem

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

    ; ------------------------------------------------------
    Func _LVCopyItem($i_FromItem, $i_ToItem, $i_SubItem = 0)
    Local $tStruct_LVITEM = DllStructCreate($tagLVITEM)
    Local $tStruct_String = DllStructCreate("wchar Buffer[4096]")

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

    ; get from item info
    DllStructSetData($tStruct_LVITEM, "Mask", BitOR($LVIF_STATE, $LVIF_IMAGE, $LVIF_INDENT, $LVIF_PARAM, $LVIF_TEXT))
    DllStructSetData($tStruct_LVITEM, "StateMask", $LVIS_STATEIMAGEMASK)
    DllStructSetData($tStruct_LVITEM, "Item", $i_FromItem)
    DllStructSetData($tStruct_LVITEM, "SubItem", $i_SubItem)
    DllStructSetData($tStruct_LVITEM, "TextMax", 4096)
    DllStructSetData($tStruct_LVITEM, "Text", DllStructGetPtr($tStruct_String))
    _GUICtrlListView_GetItemEx($g_hListView, $tStruct_LVITEM)

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

    ; set to
    DllStructSetData($tStruct_LVITEM, "Item", $i_ToItem)
    ; set text
    DllStructSetData($tStruct_LVITEM, "Mask", $LVIF_TEXT)
    DllStructSetData($tStruct_LVITEM, "Text", DllStructGetPtr($tStruct_String))
    DllStructSetData($tStruct_LVITEM, "TextMax", 4096)
    _GUICtrlListView_SetItemEx($g_hListView, $tStruct_LVITEM)
    If @error Then Return SetError(@error, @error, @error)
    ; set status
    DllStructSetData($tStruct_LVITEM, "Mask", $LVIF_STATE)
    _GUICtrlListView_SetItemEx($g_hListView, $tStruct_LVITEM)
    ; set image
    DllStructSetData($tStruct_LVITEM, "Mask", $LVIF_IMAGE)
    DllStructSetData($tStruct_LVITEM, "State", $LVIF_IMAGE)
    _GUICtrlListView_SetItemEx($g_hListView, $tStruct_LVITEM)
    ; set state
    DllStructSetData($tStruct_LVITEM, "Mask", $LVIF_STATE)
    DllStructSetData($tStruct_LVITEM, "State", $LVIF_STATE)
    _GUICtrlListView_SetItemEx($g_hListView, $tStruct_LVITEM)
    ; set indent
    DllStructSetData($tStruct_LVITEM, "Mask", $LVIF_INDENT)
    DllStructSetData($tStruct_LVITEM, "State", $LVIF_INDENT)
    _GUICtrlListView_SetItemEx($g_hListView, $tStruct_LVITEM)
    ; set Param
    DllStructSetData($tStruct_LVITEM, "Mask", $LVIF_PARAM)
    DllStructSetData($tStruct_LVITEM, "State", $LVIF_PARAM)
    _GUICtrlListView_SetItemEx($g_hListView, $tStruct_LVITEM)
    EndFunc ;==>_LVCopyItem
    #EndRegion Item Function(s) **********************************************************************************************

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

    #Region Event Function(s) **********************************************************************************************

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

    ; WM_MOUSEMOVE event handler
    ; ------------------------------------------------------
    Func WM_MOUSEMOVE($hWndGUI, $iMsgID, $wParam, $lParam)
    #forceref $iMsgID, $wParam
    ;------------------------------------------------------
    ; not dragging item we are done here
    ;------------------------------------------------------
    If $g_bDragging = False Then Return $GUI_RUNDEFMSG

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

    _GUICtrlListView_DrawDragImage($g_hListView, $g_ahDragImageList)

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

    ;------------------------------------------------------
    ; update the image move
    ;------------------------------------------------------
    Local $aPos = ControlGetPos($hWndGUI, "", $g_hListView)
    Local $x = BitAND($lParam, 0xFFFF) - $aPos[0]
    Local $y = BitShift($lParam, 16) - $aPos[1]
    If $y > $g_iLV_Height - 20 Then
    _GUICtrlListView_Scroll($g_hListView, 0, $y)
    ElseIf $y < 20 Then
    _GUICtrlListView_Scroll($g_hListView, 0, $y * -1)
    EndIf
    _GUIImageList_DragMove($x, $y)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_MOUSEMOVE

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

    ; WM_LBUTTONUP event handler
    ; ------------------------------------------------------
    Func WM_LBUTTONUP($hWndGUI, $iMsgID, $wParam, $lParam)
    #forceref $iMsgID, $wParam
    $g_bDragging = False
    Local $aPos = ControlGetPos($hWndGUI, "", $g_hListView)
    Local $x = BitAND($lParam, 0xFFFF) - $aPos[0]
    Local $y = BitShift($lParam, 16) - $aPos[1]
    _DebugPrint("$x = " & $x)
    _DebugPrint("$y = " & $y)
    ;------------------------------------------------------
    ; done dragging
    ;------------------------------------------------------
    _GUIImageList_DragLeave($g_hListView)
    _GUIImageList_EndDrag()
    _GUIImageList_Destroy($g_ahDragImageList[0])
    _WinAPI_ReleaseCapture()
    ;------------------------------------------------------
    ; do hit test see if drag ended in the listview
    ;------------------------------------------------------
    Local $tStruct_LVHITTESTINFO = DllStructCreate($tagLVHITTESTINFO)

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

    DllStructSetData($tStruct_LVHITTESTINFO, "X", $x)
    DllStructSetData($tStruct_LVHITTESTINFO, "Y", $y)
    $g_aIndex[1] = _SendMessage($g_hListView, $LVM_HITTEST, 0, DllStructGetPtr($tStruct_LVHITTESTINFO), 0, "wparam", "ptr")
    Local $iFlags = DllStructGetData($tStruct_LVHITTESTINFO, "Flags")
    _DebugPrint("$iFlags: " & $iFlags)
    ;------------------------------------------------------
    ; // Out of the ListView?
    ;------------------------------------------------------
    If $g_aIndex[1] == -1 Then Return $GUI_RUNDEFMSG
    ;------------------------------------------------------
    ; // Not in an item?
    ;------------------------------------------------------
    If BitAND($iFlags, $LVHT_ONITEMLABEL) == 0 And BitAND($iFlags, $LVHT_ONITEMSTATEICON) == 0 And BitAND($iFlags, $LVHT_ONITEMICON) = 0 Then Return $GUI_RUNDEFMSG
    ;------------------------------------------------------
    ; make sure insert is at least 2 items above or below, don't want to create a duplicate
    ;------------------------------------------------------
    If $g_aIndex[0] < $g_aIndex[1] - 1 Or $g_aIndex[0] > $g_aIndex[1] + 1 Then
    _DebugPrint("To = " & $g_aIndex[1])
    Local $i_NewIndex = _LVInsertItem($g_aIndex[0], $g_aIndex[1])
    If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
    Local $iFrom_index = $g_aIndex[0]
    If $g_aIndex[0] > $g_aIndex[1] Then $iFrom_index = $g_aIndex[0] + 1
    ;------------------------------------------------------
    ; copy item and subitem(s) images, text, and state
    ;------------------------------------------------------
    For $x = 1 To _GUICtrlListView_GetColumnCount($g_hListView) - 1
    _LVCopyItem($iFrom_index, $i_NewIndex, $x)
    If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
    Next
    ;------------------------------------------------------
    ; delete from
    ;------------------------------------------------------
    _GUICtrlListView_DeleteItem($g_hListView, $iFrom_index)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_LBUTTONUP

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

    ; WM_NOTIFY event handler
    ; ------------------------------------------------------
    Func WM_NOTIFY($hWndGUI, $iMsgID, $wParam, $lParam)
    #forceref $hWndGUI, $iMsgID, $wParam
    Local $tNMHDR, $iCode, $x, $y, $tNMLISTVIEW, $hWndFrom, $tDraw, $iDrawStage, $iItemSpec
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam) ;NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $iCode = DllStructGetData($tNMHDR, "Code")
    $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    Switch $hWndFrom
    Case $g_hListView
    Switch $iCode
    Case $LVN_BEGINDRAG
    _DebugPrint("$LVN_BEGINDRAG")
    $x = BitAND($lParam, 0xFFFF)
    $y = BitShift($lParam, 16)
    $tNMLISTVIEW = DllStructCreate($tagNMLISTVIEW, $lParam)
    $g_aIndex[0] = DllStructGetData($tNMLISTVIEW, "Item")
    $g_ahDragImageList = _GUICtrlListView_CreateDragImage($g_hListView, $g_aIndex[0])
    If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)

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

    _GUIImageList_BeginDrag($g_ahDragImageList[0], 0, 0, 0)

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

    If @error Then Return SetError(-1, -1, $GUI_RUNDEFMSG)
    _DebugPrint("From = " & $g_aIndex[0])
    _GUIImageList_DragEnter($g_hListView, $x, $y)
    _WinAPI_SetCapture($hWndGUI)
    $g_bDragging = True
    Case $NM_CUSTOMDRAW
    _DebugPrint("$NM_CUSTOMDRAW")
    $tDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    $iDrawStage = DllStructGetData($tDraw, "dwDrawStage")
    $iItemSpec = DllStructGetData($tDraw, "dwItemSpec")
    Switch $iDrawStage
    Case $CDDS_PREPAINT
    _DebugPrint("$CDDS_PREPAINT")
    Return $CDRF_NOTIFYITEMDRAW
    Case $CDDS_ITEMPREPAINT
    _DebugPrint("$CDDS_ITEMPREPAINT")
    If BitAND($iItemSpec, 1) = 1 Then
    DllStructSetData($tDraw, "clrTextBk", $CLR_AQUA)
    Else
    DllStructSetData($tDraw, "clrTextBk", $CLR_WHITE)
    EndIf
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY
    #EndRegion Event Function(s) **********************************************************************************************

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

    Func _DebugPrint($s_Text)
    If Not $g_iDebugIt Then Return
    $s_Text = StringReplace($s_Text, @CRLF, @CRLF & "-->")
    ConsoleWrite("!===========================================================" & @CRLF & _
    "+===========================================================" & @CRLF & _
    "-->" & $s_Text & @CRLF & _
    "+===========================================================" & @CRLF)
    EndFunc ;==>_DebugPrint

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

    lg,
    Spider

  • Hallo AutoMit,

    man kann die Bilder ganz einfach verschieben.
    Hier ein Beispiel, Bilder sind in der ZIP-Datei:


    Jedoch wird es ein klein wenig flackern, ohne geht's mit GDIPlus (+Buffer), aber das ist nicht so einfach, wenn du dich noch nicht damit auskennst.
    Wenn dir das hier reicht vom Flackern her, die Hauptfunktionen sind _IsPressed und GUIGetCursorInfo.

    LG NO1 :)

  • Vielen Dank Euch 3 - nach meinem grünen Harken sind doch noch Antworten gekommen, die ich erst heute gesehen habe. Sorry ...

    Ich würde kein echtes Drag&Drop Verhalten probieren. Ein Bild ziehen (es bleibt also sichtbar, die Bewegung ist live) scheint mir etwas zu aufwändig.

    Hallo BugFix, ist das Beispiel von "NO1 :-)" echtes Drag & Drop?

    Ist wohl noch ein bisschen zusätzliche Arbeit

    Hallo GtaSpider, ich versuche gerade den Code zu verstehen :)

    man kann die Bilder ganz einfach verschieben.

    Hallo NO1 :-), vielen Dank - das sieht nach einem Anfang aus. Klasse.

    Das Thema ist wirklich komplexer, als ich zu Beginn dachte. Ich versuche mich, weiter einzuarbeiten.

    Nächsten Schritte - es muss ein Raster erzeugt werden, so dass die verschobenen Bilder in einem Raster (siehe Screenshot Post 1) liegen.

    Und ich muss dann die Dateinamen im Raster auslesen, weil ich die verschobenen Bilder nach der neuen Reihenfolge umbenennen möchte.

  • AutoMit, gerne...

    Die Variante die ich gepostet habe, wird immer leicht flackern... Wenn dich das stört, kann man's auch anders lösen... Aber das wird dann komplizierter...

    Wenn du irgendwelche Fragen hast, kannst du ich immer an dieses tolle Forum hier wenden ;)

    Lg NO1 :)

    Edit: Wie GtaSpider gesagt hat (da bin ich noch gar nicht drauf gekommen): Schau dir mal zum Beispiel deinen Desktop an... Das ist im Prinzip auch nur ein ListView wo man die Dateien auch per Drag & Drop verschieben kann... Also sowas wäre vielleicht auch möglich mit deinen Bildern... Müsst ich mir anschauen

    Einmal editiert, zuletzt von NO1 :-) (17. Oktober 2017 um 11:44)

  • wird immer leicht flackern... Wenn dich das stört

    Das ist kein Problem.


    ===========================

    Zurück zu den Basics - Neustart :)

    ===========================

    Da ich merke, dass das ganze zu komplex ist, versuche ich den ersten Schritt zu gehen.

    Schritt (1)

    Habt Ihr ein Beispiel, wie folgendes realisieren kann?

    AutoIt - eine Oberfläche, die per Drag and Drop aus dem Dateimanager Bilder enthält, die in den Bilderboxen (image) angezeigt werden.

    Die Bilderboxen sollen (wenn sie leer sind) einen Rahmen haben (sonst sieht man nicht, wohin das Bild gezogen werden kann).

    Die Bilderboxen sollen dynamisch als Array erzeugt werden.

    Beispiel - 3 Reihen mit einer unterschiedlichen Anzahl von Bildern:

    1. Reihe = 2 Bilderboxen nebeneinander

    2. Reihe = 3 Bilderboxen nebeneinander

    3. Reihe = 1 Bilderbox

    Die Breite der Bilder ergibt sich aus der Breite der Reihe abzüglich Abstand.

    Die Höhe der Bilder ergibt sich aus der Breite geteilt durch 1,33.

    Wenn auf eine Bilderbox geklickt wird, wird das darin enthaltene Bild wieder entfernt. Soweit die Theorie.

    Bei meinem Script scheitere ich bereits an der Drag / Drop Funktion - von der dynamischen Erzeugung der Bilderboxen-Reihen ganz zu schweigen.

  • Also ich weiß nicht, ob ich das jetzt richtig verstanden hab, aber woher kommen die Bilder? Willst du die aus dem Explorer per Drag & Drop in deine Boxen ziehen oder sind das bestimmte Bilder? Ich konnt mir dein Skript heute nicht mehr anschauen, also eher morgen...