[Решено] Перетаскивание (файла) НАРУЖУ
Модератор: Модераторы
[Решено] Перетаскивание (файла) НАРУЖУ
Здрасьте.
Это опять я со своими традиционно глупыми вопросами.
Итак, задача.
Место действия: Винда.
Хочется научить свое приложение таскать мышью файлы наружу, аналогично тому как, например, из 7-zip я могу свободно вытаскивать файлы из архива хоть в проводник, хоть в Total Commander, а также между разными экземплярами моего приложения. Насколько я понимаю, 7-zip в этом случае распаковывает файлы уже после того, как я отпустил мышь над проводником, например.
Пояснение. Самих файлов как таковых (то есть лежащих готовыми уже на диске) нет, моя программа должна их формировать по мере надобности.
ПодскАжите, как это реализуется?
Заранее спасибо.
Это опять я со своими традиционно глупыми вопросами.
Итак, задача.
Место действия: Винда.
Хочется научить свое приложение таскать мышью файлы наружу, аналогично тому как, например, из 7-zip я могу свободно вытаскивать файлы из архива хоть в проводник, хоть в Total Commander, а также между разными экземплярами моего приложения. Насколько я понимаю, 7-zip в этом случае распаковывает файлы уже после того, как я отпустил мышь над проводником, например.
Пояснение. Самих файлов как таковых (то есть лежащих готовыми уже на диске) нет, моя программа должна их формировать по мере надобности.
ПодскАжите, как это реализуется?
Заранее спасибо.
Последний раз редактировалось kotompazb 17.08.2016 21:57:39, всего редактировалось 1 раз.
Это ваще возможно?
так как из total commander можно вытащить файл на рабочий стол - то значит да, можно.
не...е: это не возможно....Это ваще возможно?
http://wiki.freepascal.org/Drag_and_Drop_sample
http://wiki.lazarus.freepascal.org/LCL_Drag_Drop
ну...у и нечто компонента:
https://github.com/prof7bit/NativeDragDrop
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.
что не мешает пойти дальше... Т.е. начало "положил" а вопрошающий пускай продолжает. Полезность там есть.в этих статьях рассказывается про драг-дроп внутри LCL приложения
вот этого не понял. Т.е. вы считаете ссылки выше - Брехня, а компонент Правда? Бред какой тоА вот этот компонент больше похож на правду.
Процесс "вытаскивания...через ole" файла
п.с.
критика...критика, а ваша польза какая?
В общем: будут пользоваться компонентом. Оно ведь готовое и работает
Кстати... а коим боком: total commander??? Может DC? Если да то там свои булыжники. Он весело с драгом работает. Да и вытащить проблемно будет (буков много
а коим боком: total commander
Википедия говорит, что TC64 в Лазарусе компилится
Добавлено спустя 22 минуты 3 секунды:
Всем спасибо. Пойду разбираться.
и сорцы открыты?Википедия говорит
pupsik писал(а):вот этого не понял. Т.е. вы считаете ссылки выше - Брехня, а компонент Правда? Бред какой то
сам то читал о чём в ссылках пишется?
скалогрыз ну куда мне до вас то... КонеШно не читал
То что там о "внутри" это не значит что не даст понять как сделать "наружу". Но...о: если вы считаете по другому... Поделитесь рабочим примером (ссылкой).
И почему, наезд есть, а смысла от него нет. Т.е. каким образом вопрошающий начнёт этот "drag" (до drop потом ещё дойти надо)? По мановению волшебной палочки?
Откуда вы знаете как у него данные будут подаваться? Из поста выше я не догадался. Там минимут 3 варианта развития события (в принципе можно свести к одному но... он бы вопроса не задавал, если бы знал).
п.с.
Но..о, если охота флудить то хоть по теме. Второй раз прошу вас поделиться чем то полезным и по теме...
п.с.п.с.
Хотя:
Сори за фривольность
То что там о "внутри" это не значит что не даст понять как сделать "наружу". Но...о: если вы считаете по другому... Поделитесь рабочим примером (ссылкой).
И почему, наезд есть, а смысла от него нет. Т.е. каким образом вопрошающий начнёт этот "drag" (до drop потом ещё дойти надо)? По мановению волшебной палочки?
Откуда вы знаете как у него данные будут подаваться? Из поста выше я не догадался. Там минимут 3 варианта развития события (в принципе можно свести к одному но... он бы вопроса не задавал, если бы знал).
п.с.
Но..о, если охота флудить то хоть по теме. Второй раз прошу вас поделиться чем то полезным и по теме...
п.с.п.с.
Хотя:
может и драг она сама сделает, по мере надобностимоя программа должна их формировать по мере надобности
Сори за фривольность
pupsik писал(а):То что там о "внутри" это не значит что не даст понять как сделать "наружу".
Тогда тебе нужно пояснить, каким таким образом TObject попадает "наружу" и каким образом система (Windows) его (TObject) узнаёт и обращается с ним как со списком файлов.
Если система с TObject-ом ничего сделать не может, то и мне рабочими примерами поделиться не удасться
pupsik писал(а):Откуда вы знаете как у него данные будут подаваться? Из поста выше я не догадался.
а потому что я писал этот самый драг файлов наружу... давно, для закрытой библиотеки на Делфи.
И именно NativeDragDrop выглядит, как то что нужно.
э..э: вы о чем? Мне нужно? Вы уверены? Понять что да как нужно не мне, а вопрошающему... Я, как и любой другой, может показать как (согласно вопроса), или направить где почитать. А вот нужно, должен - это другой вопрос.Тогда тебе нужно пояснить
Вот я вас прощу, прощу, а вы:
Писал, когда то и т.д, и т.п.... уж..жса потому что я писал этот самый драг файлов наружу... давно, для закрытой библиотеки на Делфи.
он выглядит как возможное решение вопроса... Ни более.И именно NativeDragDrop выглядит, как то что нужно.
скалогрыз писал(а):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 писал(а):У меня, если подробнее, есть ListView - в нем собственно список файлов, есть ListBox - в нем некое подобие "папок". На данный момент в обработчике onMouseDown ListView через BeginDrag таскаются файлы между этими "папками", то есть взял в ListView, бросил в ListBox (в onDragOver обрабатывается возможность бросить само собой, в onDragDrop - сам результат).
В результате до NativeDragDrop дело просто не доходит. Если же эту (выше описанную) фичу отключить, то NativeDragDrop отлично с задачей справляется. Как-то так.
а вот попробуй так:
закоментируй код, который использует LCL-ный drag-and-drop. (BeginDrag).. Вместо него добавь использование NativeDragDrop.
Кроме этого добавь обработчик в форму (TForm) OnDropFiles.
В этом OnDropFiles заполняй тот ListView из которого nativedrag НЕ начинался
скалогрыз писал(а):Кроме этого добавь обработчик в форму (TForm) OnDropFiles.
В этом OnDropFiles заполняй тот ListView из которого nativedrag НЕ начинался
OnDropFiles у формы существует уже давненько (она и раньше извне файлики принимала).
Остался вопрос, как различить два случая:
1. Файлы бросаются извне (или из другого экземпляра приложения),
2. Перетаскивание происходит внутри приложения.
Точнее различить то их не сложно, просто ведя флажек, который устанавливается в DragGetFileList NativeDragDrop, сигнализируя о том, что началось перетаскивание внутри, и анализируется, а потом сбрасывается в OnDropFiles формы.
Также естественно можно определить и координаты курсора, задетектив в какую именно "папку" брошен(ы) файл(ы)
Выходит, пока получается только одна проблема: в старом обработчике MouseDown перед BeginDrag я смотрел Shift: TShiftState и при зажатом Shift менял курсор (и режим с переноса на копирование, но это тонкости). Вот где (в каком обработчике) это (изменять курсор и режим) лучше сделать сейчас (и как), я пока не понял. Если проверять
