| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > TListView and Drag&Drop |
| Автор: Illusion Dolphin 6.2.2004, 09:44 |
| Что-то я нигде не нашёл, как можно перетащить элемент из TListView в проводник\рабочий стол, и после перетаскивания программа хотя бы получила конечную папку как результат. |
| Автор: <Spawn> 7.2.2004, 07:32 |
| Наверное, нужно использовать интерфейс IDropTarget, но я пока с ними почти не работал, так что большего сказать не могу. |
| Автор: Illusion Dolphin 7.2.2004, 09:30 |
| Администрация, очень хороший пример, в интернете нашёл всего одну статью, неплохо было бы в FAQ занести, а то везде только односторонние функции как на приложение кидать. Вот ссылка, где всё подробно написано: http://podgoretsky.com/ftp/Docs/Delphi/D3/D3ProgLib/ch_04.htm |
| Автор: Medved 7.2.2004, 11:09 | ||
Спасибо. Обязательно добавим. |
| Автор: crazynetwork 12.4.2011, 21:25 |
| И так, тема очень старая, но не раскрыта. Кто то знает как сделать так как написал топикстартер? ДрагендДроп из приложения и получить путь к папке, В КОТОРУЮ перетаскивается ... |
| Автор: crazynetwork 13.4.2011, 12:40 | ||
Народ, помогайте, выручайте. Как узнать конечный путь файла? |
| Автор: Snowy 13.4.2011, 13:02 |
| http://www.delphilab.ru/content/view/239/72/ http://forum.vingrad.ru/forum/topic-84137/anchor-entry650739/0.html |
| Автор: crazynetwork 13.4.2011, 13:09 | ||
Дело в том что begin DropFileSource1.Files.Add('C:\' + li.Caption); li := ListView1.GetNextItem(li, sdBelow, [isSelected]); end; А как получить например в Label будущий путь к файлу, то есть там куда мы его перетягиваем, при том еще до того как он оказался там? Смысл в том что бы при перетаскивании узнать путь где он будет лежать (куда мы его собрались перетянуть) |
| Автор: Snowy 13.4.2011, 13:34 |
| Нигде он не будет лежать. Ты перетягиваешь данные между двумя приложениями. А будет оно сохранять файл на диск или открывать, или передавать по сети - это уже дело того приложения, которому ты файл отдаёшь. Оно не обязано докладывать, что будет с этими данными делать. Узнать это можно лишь перехватывая файловые операции. |
| Автор: crazynetwork 13.4.2011, 23:11 |
| Дело в том что файл надо "перетягивать" с фтп сервера. Что бы его скачать надо знать место куда мы его скачиваем. И наоборот что бы драгенддропнуть файл должен находиться на локальном диске. П.С. вариант копировать файл в папку темп и потом его драгать и дропать не подходит. |
| Автор: crazynetwork 15.4.2011, 21:29 |
| У кого есть решение данного вопроса ? |
| Автор: kami 15.4.2011, 22:39 |
Snowy уже все сказал. Решения этого вопроса не существует. Это ограничение механизма drag&drop windows, сделанное в угоду независимости источника от приемника. http://melander.dk/delphi/dragdrop/#faq_21 Но - есть обходные маневры решения передачи "пока отсутствующих" данных. Например, воспользуйтесь drag&drop component suite (ссылки также дал Snowy), а именно - асинхронной операцией. Второй метод (afair) - "застопориться" в drop-событии\методе, скачать файл во временную папку и продолжить выполнение drop метода. Добавлено через 8 минут и 4 секунды Кстати, у d&d component suite есть демки подобного "дропа" |
| Автор: crazynetwork 17.4.2011, 00:24 | ||
Раскопал демку AsyncSource with Filestreams. Проверил, оно там даже работает. Чего не делал повторить отдельно не получается, не работает и все тут. На форме есть листвью, в котором отображаются файлы с фтп на который я попадаю через Synapse. Помогите выдрать нужный код и заюзать его для моей задачи (drag&drop). procedure TForm2.Button1Click(Sender: TObject); var i:integer; FTPClient: TFTPSend; begin FTPClient:=TFTPSend.Create; FTPClient.TargetHost:=host; FTPClient.TargetPort:=21; FTPClient.UserName:=login; FTPClient.Password:=pass; FTPClient.PassiveMode:=true; if FTPClient.Login then begin ListView1.Clear; FTPClient.List(FTPClient.GetCurrentDir,false); for i := 0 to FTPClient.FtpList.Count-1 do begin with ListView1.Items.Add do begin Caption:=FTPClient.FtpList[i].FileName; if FTPClient.FtpList[i].Directory then SubItems.Add('директория') else SubItems.Add('файл'); SubItems.Add(DateToStr(FTPClient.FtpList[i].FileTime)) end; end; end; end; |
| Автор: crazynetwork 30.4.2011, 15:54 |
| У кого то работает этот код ? : http://articles.org.ru/cn/showdetail.php?cid=5752 |
| Автор: crazynetwork 30.4.2011, 21:19 | ||
На просторах инета был найден такой код:
Но при копировании файла создается пустой файлик с размером 0 и все. |
| Автор: crazynetwork 6.5.2011, 15:06 |
| Задачу решил. Кому интересно обращайтесь. |