[Решено] Перетаскивание (файла) НАРУЖУ

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[Решено] Перетаскивание (файла) НАРУЖУ

Сообщение kotompazb » 11.08.2016 22:51:05

Здрасьте.
Это опять я со своими традиционно глупыми вопросами.
Итак, задача.
Место действия: Винда.
Хочется научить свое приложение таскать мышью файлы наружу, аналогично тому как, например, из 7-zip я могу свободно вытаскивать файлы из архива хоть в проводник, хоть в Total Commander, а также между разными экземплярами моего приложения. Насколько я понимаю, 7-zip в этом случае распаковывает файлы уже после того, как я отпустил мышь над проводником, например.
Пояснение. Самих файлов как таковых (то есть лежащих готовыми уже на диске) нет, моя программа должна их формировать по мере надобности.
ПодскАжите, как это реализуется?
Заранее спасибо.
Последний раз редактировалось kotompazb 17.08.2016 22:57:39, всего редактировалось 1 раз.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Перетаскивание (файла) НАРУЖУ

Сообщение kotompazb » 14.08.2016 19:15:02

Это ваще возможно?
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Перетаскивание (файла) НАРУЖУ

Сообщение azsx » 14.08.2016 19:30:02

так как из total commander можно вытащить файл на рабочий стол - то значит да, можно.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: Перетаскивание (файла) НАРУЖУ

Сообщение pupsik » 14.08.2016 19:30:51

Это ваще возможно?
не...е: это не возможно.... :mrgreen:

http://wiki.freepascal.org/Drag_and_Drop_sample
http://wiki.lazarus.freepascal.org/LCL_Drag_Drop
ну...у и нечто компонента:
https://github.com/prof7bit/NativeDragDrop
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Перетаскивание (файла) НАРУЖУ

Сообщение скалогрыз » 14.08.2016 20:00:44

pupsik писал(а):http://wiki.freepascal.org/Drag_and_Drop_sample
http://wiki.lazarus.freepascal.org/LCL_Drag_Drop

в этих статьях рассказывается про драг-дроп внутри LCL приложения, к запросу kotompazb отношения не имеет.

pupsik писал(а):ну...у и нечто компонента:
https://github.com/prof7bit/NativeDragDrop

А вот этот компонент больше похож на правду.
Процесс "вытаскивания" файла из приложения, взаимодейтсвует с системой в винде реализуется через ole.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Перетаскивание (файла) НАРУЖУ

Сообщение pupsik » 14.08.2016 20:30:45

в этих статьях рассказывается про драг-дроп внутри LCL приложения
что не мешает пойти дальше... Т.е. начало "положил" а вопрошающий пускай продолжает. Полезность там есть.

А вот этот компонент больше похож на правду.
вот этого не понял. Т.е. вы считаете ссылки выше - Брехня, а компонент Правда? Бред какой то :roll:

Процесс "вытаскивания...через ole" файла
:mrgreen: угу... Но можно и не только. Было бы желание.

п.с.
критика...критика, а ваша польза какая?
В общем: будут пользоваться компонентом. Оно ведь готовое и работает :) Или у вас, скалогрыз, есть иные предложения?

Кстати... а коим боком: total commander??? Может DC? Если да то там свои булыжники. Он весело с драгом работает. Да и вытащить проблемно будет (буков много :)).
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Перетаскивание (файла) НАРУЖУ

Сообщение kotompazb » 14.08.2016 21:39:22

а коим боком: total commander

Википедия говорит, что TC64 в Лазарусе компилится

Добавлено спустя 22 минуты 3 секунды:
Всем спасибо. Пойду разбираться.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Перетаскивание (файла) НАРУЖУ

Сообщение pupsik » 14.08.2016 22:07:37

Википедия говорит
и сорцы открыты? :wink: Т.е. как там реализовано можно только догадываться... А вот в DC, tuxcmd можно посмотреть как.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Перетаскивание (файла) НАРУЖУ

Сообщение скалогрыз » 14.08.2016 22:13:59

pupsik писал(а):вот этого не понял. Т.е. вы считаете ссылки выше - Брехня, а компонент Правда? Бред какой то

сам то читал о чём в ссылках пишется?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Перетаскивание (файла) НАРУЖУ

Сообщение pupsik » 14.08.2016 22:39:30

скалогрыз ну куда мне до вас то... КонеШно не читал :mrgreen:
То что там о "внутри" это не значит что не даст понять как сделать "наружу". Но...о: если вы считаете по другому... Поделитесь рабочим примером (ссылкой).

И почему, наезд есть, а смысла от него нет. Т.е. каким образом вопрошающий начнёт этот "drag" (до drop потом ещё дойти надо)? По мановению волшебной палочки?

Откуда вы знаете как у него данные будут подаваться? Из поста выше я не догадался. Там минимут 3 варианта развития события (в принципе можно свести к одному но... он бы вопроса не задавал, если бы знал).

п.с.
Но..о, если охота флудить то хоть по теме. Второй раз прошу вас поделиться чем то полезным и по теме...

п.с.п.с.
Хотя:
моя программа должна их формировать по мере надобности
может и драг она сама сделает, по мере надобности :mrgreen:
Сори за фривольность :)
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Перетаскивание (файла) НАРУЖУ

Сообщение скалогрыз » 15.08.2016 01:10:10

pupsik писал(а):То что там о "внутри" это не значит что не даст понять как сделать "наружу".

Тогда тебе нужно пояснить, каким таким образом TObject попадает "наружу" и каким образом система (Windows) его (TObject) узнаёт и обращается с ним как со списком файлов.
Если система с TObject-ом ничего сделать не может, то и мне рабочими примерами поделиться не удасться ;)

pupsik писал(а):Откуда вы знаете как у него данные будут подаваться? Из поста выше я не догадался.

а потому что я писал этот самый драг файлов наружу... давно, для закрытой библиотеки на Делфи.
И именно NativeDragDrop выглядит, как то что нужно.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Перетаскивание (файла) НАРУЖУ

Сообщение pupsik » 15.08.2016 01:35:22

Тогда тебе нужно пояснить
э..э: вы о чем? Мне нужно? Вы уверены? Понять что да как нужно не мне, а вопрошающему... Я, как и любой другой, может показать как (согласно вопроса), или направить где почитать. А вот нужно, должен - это другой вопрос.

Вот я вас прощу, прощу, а вы:
а потому что я писал этот самый драг файлов наружу... давно, для закрытой библиотеки на Делфи.
Писал, когда то и т.д, и т.п.... уж..жс :mrgreen:

И именно NativeDragDrop выглядит, как то что нужно.
он выглядит как возможное решение вопроса... Ни более.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Перетаскивание (файла) НАРУЖУ

Сообщение kotompazb » 15.08.2016 01:48:23

скалогрыз писал(а):NativeDragDrop

Да. Штука предельно простая для вытаскивания файлов ничего проще не нашел.
Но мне похоже придется все же ковырять в сторону этих ссылок:
http://www.webdelphi.ru/2012/01/zametki-pro-dragdrop-v-delphi/
и
http://it.kgsu.ru/DelCOM/com_0012.html
У меня, если подробнее, есть ListView - в нем собственно список файлов, есть ListBox - в нем некое подобие "папок". На данный момент в обработчике onMouseDown ListView через BeginDrag таскаются файлы между этими "папками", то есть взял в ListView, бросил в ListBox (в onDragOver обрабатывается возможность бросить само собой, в onDragDrop - сам результат).
В результате до NativeDragDrop дело просто не доходит. Если же эту (выше описанную) фичу отключить, то NativeDragDrop отлично с задачей справляется. Как-то так.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Перетаскивание (файла) НАРУЖУ

Сообщение скалогрыз » 15.08.2016 02:19:01

kotompazb писал(а):У меня, если подробнее, есть ListView - в нем собственно список файлов, есть ListBox - в нем некое подобие "папок". На данный момент в обработчике onMouseDown ListView через BeginDrag таскаются файлы между этими "папками", то есть взял в ListView, бросил в ListBox (в onDragOver обрабатывается возможность бросить само собой, в onDragDrop - сам результат).
В результате до NativeDragDrop дело просто не доходит. Если же эту (выше описанную) фичу отключить, то NativeDragDrop отлично с задачей справляется. Как-то так.

а вот попробуй так:
закоментируй код, который использует LCL-ный drag-and-drop. (BeginDrag).. Вместо него добавь использование NativeDragDrop.
Кроме этого добавь обработчик в форму (TForm) OnDropFiles.
В этом OnDropFiles заполняй тот ListView из которого nativedrag НЕ начинался :)
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Перетаскивание (файла) НАРУЖУ

Сообщение kotompazb » 15.08.2016 06:02:11

скалогрыз писал(а):Кроме этого добавь обработчик в форму (TForm) OnDropFiles.
В этом OnDropFiles заполняй тот ListView из которого nativedrag НЕ начинался :)

OnDropFiles у формы существует уже давненько (она и раньше извне файлики принимала).
Остался вопрос, как различить два случая:
1. Файлы бросаются извне (или из другого экземпляра приложения),
2. Перетаскивание происходит внутри приложения.
Точнее различить то их не сложно, просто ведя флажек, который устанавливается в DragGetFileList NativeDragDrop, сигнализируя о том, что началось перетаскивание внутри, и анализируется, а потом сбрасывается в OnDropFiles формы.
Также естественно можно определить и координаты курсора, задетектив в какую именно "папку" брошен(ы) файл(ы)
Выходит, пока получается только одна проблема: в старом обработчике MouseDown перед BeginDrag я смотрел Shift: TShiftState и при зажатом Shift менял курсор (и режим с переноса на копирование, но это тонкости). Вот где (в каком обработчике) это (изменять курсор и режим) лучше сделать сейчас (и как), я пока не понял. Если проверять
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 229

Рейтинг@Mail.ru