Что нового

Как сделать Drag-and-Drop в ListView сразу несколько файлов

pvnn

Осваивающий
Сообщения
305
Репутация
32
Доброго времени суток
Как добавить в ListView сразу несколько выделенных файлов. Добавляется только один.

Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>

$Form1 = GUICreate("Form1", 435, 260, -1, -1,   -1, $WS_EX_ACCEPTFILES)
$hListView = GUICtrlCreateListView("", 0, 8, 426, 238)
 GUICtrlSetState(-1, $GUI_DROPACCEPTED)
  _GUICtrlListView_AddColumn($hListView, "Название", 300)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

        Case $GUI_EVENT_DROPPED
			If @GUI_DropId = $hListView Then
				ConsoleWrite(@CRLF&@GUI_DragFile)
				FillListView(@GUI_DragFile)
			EndIf
	EndSwitch
WEnd

Func FillListView($File)
	GUICtrlCreateListViewItem($File,$hListView)
EndFunc
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPISysWin.au3>
#include <GUIListView.au3>

Global $g_hGUI = GUICreate("WM_DROPFILES", 640, 400, -1, -1, -1, $WS_EX_ACCEPTFILES)
Global $g_iLV = GUICtrlCreateListView("Файлы", 5, 5, 630, 390, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_NOSORTHEADER))
_GUICtrlListView_SetExtendedListViewStyle(-1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_INFOTIP))
_GUICtrlListView_SetColumnWidth(-1, 0, $LVSCW_AUTOSIZE_USEHEADER)
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES")
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
	Local $aCursInfo = GUIGetCursorInfo($g_hGUI)
	If Not @error Then
		Switch $aCursInfo[4]
			Case $g_iLV
				Local $aFiles = _WinAPI_DragQueryFileEx($wParam)
				If Not @error Then
					_GUICtrlListView_DeleteAllItems($g_iLV)
					For $i = 1 To $aFiles[0]
						GUICtrlCreateListViewItem($aFiles[$i], $g_iLV)
						GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
					Next
				EndIf
				_WinAPI_DragFinish($wParam)
				Return 0
		EndSwitch
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_DROPFILES
_WinAPI_DragQueryFileEx
WM_DROPFILES
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Tempo, попробовал оба примера.
В принципе работает, но файлы странно добавляются, например, я выделяю файлы через один, делаю Drag-and-drop, а они добавляются в Edit в случайном порядке. Можно это исправить? Или это особенности Win7 x64? Народ отпишитесь, у кого как?

Подозреваю, что придется делать сортировку, например по имени...
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
pvnn [?]
отпишитесь, у кого как
Насколько я понял, проводник передаёт файлы в порядке текущей сортировки. Первым будет ключевой файл - тот, за который перетаскивается группа. Далее файлы "ниже" ключевого и потом файлы, которые "выше". Другими словами, если перетаскивать за верхний файл выделенной группы, то порядок будет, как в проводнике.


Добавлено:
Сообщение автоматически объединено:

Это я рассматривал вид "список". В случае "значки" или "плитка" файлы будут "левее" и "правее" ;)
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
InnI спасибо, а то я уже мозг сломал :stars:
 
Верх