Topic: Получить имя перетаскиваемого из проводника файла
Есть таблица, в которую добавляются ссылки на файлы.
Добавление происходит путем использования стандартного диалога открытия файла. Однако, это уже прошлый век и хочется реализовать механизм Drag&Drop, т.е. просто мышью перетаскивать из проводника файлы в эту таблицу.
В Delphi это делается элементарно.
А как сделать это в MVD?
Если пока невозможно, то прошу разработчка добавить соотв. функции.
Рабочий (сам проверял) пример перетаскивания файлов в листбокс (Delphi):
1. Добавить в секцию uses: Shellapi
2. Добавляем в implementation:
//процедура извлечения файлов при перетаскивании
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
i: integer;//счетчик файлов
CountFile: integer;//кол-во файлов
size: integer;//длина строки, содержащей путь к файлу
Filename: PChar; //указатель на имя файла
begin
try
//функция DragQueryFile извлекает имена перемещенных мышью файлов
//получает кол-во перемещаемых файлов
CountFile := DragQueryFile(Msg.Drop, $FFFFFFFF, Filename, 255);
//извлекаем пути перемещаемых файлов и добавляем их в ListBox
for i := 0 to (CountFile - 1) do
begin
//получаем длину строки, содержащей путь к файлу
size := DragQueryFile(Msg.Drop, i , nil, 0)+1;
//выделяем память под строку с именем файла
Filename:= StrAlloc(size);
//получаем непосредственно само имя файла и путь
DragQueryFile(Msg.Drop,i , Filename, size);
//Добавляем его в ListBox
lst1.items.add(StrPas(Filename));
//освобождаем строку
StrDispose(Filename);
end;
finally
DragFinish(Msg.Drop); // отпустим файл
end;
end;
3. добавляем процедуру
procedure TForm1.FormCreate(Sender: TObject);
begin
/регистрируем, что ListBox1 будет принимать файлы
DragAcceptFiles(Form1.Lst1.Handle, True);
//Внимание, если ListBox находится на панели, то для регистрации пишем
//DragAcceptFiles(Form1.Handle, True);
end;