| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: ActiveX/СОМ/CORBA > Drag & Drop |
| Автор: z-END 16.2.2006, 15:53 |
| каким способом можно организовать алгоритм перетаскивания из моего приложения в другие, также как это организовано например в WinRAR? нашел один топик по этой http://forum.vingrad.ru/index.php?showtopic=13552&view=findpost&p=88704, но слабоват я в этом |
| Автор: Snowy 16.2.2006, 15:58 |
| Ну дык http://forum.vingrad.ru/index.php?act=module&module=vingradfaq§ion=641 |
| Автор: z-END 16.2.2006, 16:25 |
| эм.. я это в DRKB все смотрел.. кроме http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=2513 ниче мне неподходит.. и то там не реалзован механизм "перетаскивания" а используется просто "вставка" |
| Автор: z-END 20.2.2006, 17:01 |
| Снови, так что мне делать? |
| Автор: Snowy 20.2.2006, 20:25 |
| Тут нужно курить очень много доки по COM. В частности по IDropSource и IDataObject. Как грится, M$ постаралась, чтобы процесс перетаскивания реализовать было легко и удобно - всего парой сотен строк кода. Прогулялся на тори. В основном все либо платное, либо старое. http://www.torry.net/pages.php?id=233 - вот более-менее подходящая штуковина. Реализует нужные интерфейсы. Правда для 5-й дельфи, но хоть что-то. |
| Автор: Snowy 20.2.2006, 22:13 | ||
| Щас у себя проверил. Проинсталилось без проблем на семерку. Вот, нарисовал код:
В TListView запихать список файлов (в примере файлы лежат на C:\). Поставить MultiSelect в true (не обязательно). После этого можно спокойненько таскать "файлы" из листбокса куда угодно. |
| Автор: RA 20.2.2006, 22:47 |
| От хорошо что я эту тему заметил Помогут тебе компоненты Raize DropMaster. Остальные вопросы по этим компонентам через PM. |
| Автор: z-END 22.2.2006, 14:12 |
| блин.. ну намучлася я с ними... во всех компонентах реализован такой вариант: и вот этот на этот самый execute никак неповлиять... мне ненужен вариант простого копирования, нужен вариант аналогично как в winRAR перетаксивание вызывает за собой процесс разархивации во временную папку а потом перемещение в уже указанную. т.е. из контрола (листвью, листбокс и т.п. это непринципаильно) нужно перетащить столбцы, при этом должны создасьтся файлы (которые имеют имена отличные от указанных в списке, данные в них заполняются из других файлов) при этом процесс копирования нужно осуществлять собственной процедурой. а во всех подобных контролах весь процесс сводится к TComponent.execute че делать? |
| Автор: Snowy 22.2.2006, 14:18 | ||
| Ну и хорошо. Отдаешь компоненту имена файлов во временной папке (файлов пока нет). На событие OnDrop вешаешь разархивацию. Файлы появляются. Добавлено @ 14:21 Вот. Заглянул в справку по этому событию. Там как раз и написано, что оно и предназначено для
Добавлено @ 14:22 Там даже полноценный пример есть, как с ним работать. |
| Автор: Snowy 22.2.2006, 14:38 |
| С чего ты решил, что убъет? Копированием будет заниматься принимающая программ, а не твоя. А при распаковке - тебе решать, будет твоя отвечать или нет. |
| Автор: z-END 22.2.2006, 14:42 |
| может быть и так, но в win2K при drag&drop между приложениями виснут оба до конца выполнения обработки... т.е. если я из проводника пертащу файлы в фотошоп к примеру, то ни проводник ни фотофоп небудут доступны пока все файлы неоткроются в фотошопе. |
| Автор: Snowy 22.2.2006, 14:51 |
| Хм. Логично. Тем более, что тебе нужно удалить файлы из временной папки. Частично тут может помочь установка Dragtypes в [dtMove] . Правда поможет только в том случае, когда временная папка находится на том же диске, что и target. Добавлено @ 14:53 Кстати. Кроме этого ты спокойно можешь вынести Execute в другой Thread. Тогда никакой задержки не будет. Пусть другой тред выполняет распаковку и ожидание окончания операции. Добавлено @ 15:00 Я тут еще подумал. Еще логичней будет создавать TDropFileSource динамически. Тогда ты сможешь спокойно перетаскивать файлы еще раз, в то время, пока предыдущая операция по перетаскиванию продолжает работать в фоне. |