Drag & Drop - Правильно воспользоватся

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

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

Drag & Drop - Правильно воспользоватся

Сообщение AMD » 02.03.2008 14:13:09

Есть такая задача нужно из проводника перетенуть файл на мемо
Каким образом узнать путь к этому файлу

Видел есть событие ondragdrop
Код: Выделить всё
procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin

end; 


X Y - это понятно что координаты мышки


Спасибо заранее
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение alexs » 02.03.2008 15:04:55

Смотри пример - Lazarus/examples/dropfiles
там всё просто
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение AMD » 02.03.2008 17:17:52

alexs писал(а):Смотри пример - Lazarus/examples/dropfiles
там всё просто


Отличный пример. Спасибо

В форме создаем событие onDropFiles

Код: Выделить всё
procedure TForm1.FormDropFiles(Sender: TObject; const FileNames: array of String
  );
begin
    if length(FileNames[0])>0 then
     begin
      OpenDialog1.FileName:=FileNames[0];
      MOpenFile()
     end
     else exit;
end;       



FileNames - это массив строк - каждая строка один путь к файлу
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение AMD » 03.03.2008 12:28:26

Классно работает но вот как сделать когда перетенул файл чтобы активировалось именно это окно где я перетенул файл, а то активной остается то окно в которой файл
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение alexs » 03.03.2008 12:43:42

а Form.SetFocus? - я точно не помню - но кажется оно.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение AMD » 03.03.2008 12:55:49

alexs писал(а):а Form.SetFocus? - я точно не помню - но кажется оно.


Имено оно Form.SetFocus - правда очень странно фокусируется только один раз с момента запуска программы. Следуюшие разы не хочет больше фокусироватся.


Не могу понять а что дает Activate?
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение Павел Ишенин » 03.03.2008 13:45:05

Может еще Application.BringToFront;
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Сообщение AMD » 03.03.2008 13:53:23

Павел Ишенин писал(а):Может еще Application.BringToFront;


Работает как часики
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Re: Drag & Drop - Правильно воспользоватся

Сообщение Aleh » 15.11.2016 18:51:54

Может кто знает как реализовать обратную задачу:
1. Есть файл c:\папка1\подпапка1\подподпапка1\подподподпапка1\текст.txt (в общем где-то очень далеко)
2. Label1.Caption моей программы это "знает".
3. Как создать dropfiles этого файла из моей программы в окно проводника (например на флешку).
Буду очень благодарен дельным советам.
Aleh
новенький
 
Сообщения: 53
Зарегистрирован: 08.08.2016 12:27:45

Re: Drag & Drop - Правильно воспользоватся

Сообщение Aleh » 22.11.2016 12:03:48

"Молчание звучит не убедительно". Задачка похоже не простая.
Я на просторах инета обнаружил только одно нормальное решение http://rouse.drkb.ru/winapi.php#fwoledragdrop "OLE DragDrop." но оно для Embarcadero. Можно ли это портировать в Лазарус, я не знаю.
Может кому-нибудь поможет, я рисковать не стал, вышел из положения путем обратного инжиниринга формата буфера обмена нужной мне программы.
Во вложении "только исходники: fwoledragdrop_noexe.zip перепакованный в рар" на случай если сайт станет 404.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Aleh
новенький
 
Сообщения: 53
Зарегистрирован: 08.08.2016 12:27:45

Re: Drag & Drop - Правильно воспользоватся

Сообщение pupsik » 22.11.2016 23:57:42

Aleh не молчание.... поищите на форуме. Уже было....
В т.ч. "всплывал" компонент...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Drag & Drop - Правильно воспользоватся

Сообщение Aleh » 24.11.2016 11:22:55

дааааааа, точно!!!!
pupsik писал(а):
Это ваще возможно?
не...е: это не возможно.... :mrgreen:

http://wiki.freepascal.org/Drag_and_Drop_sample
http://wiki.lazarus.freepascal.org/LCL_Drag_Drop
ну...у и нечто компонента:
https://github.com/prof7bit/NativeDragDrop


и я это читал, после первых двух ссылок компонент я смотреть уже не стал, а зря.
======
устанавливаем, ложим на форму,
при создании формы (в инспекторе объектов у меня не прописывался) пишем NativeDragSource1.Control:=Edit1(любой визуальный потомок TWinControl с DragMode: = dmManual). При нажатии и перетаскивании по которому начинается процесс.
прописываем обработчик для перетаскивания файлов

procedure TForm.NativeDragSource1DragGetFileList(Sender: TObject; FileList: TStringList);
begin
FileList.Append(lbCurFile.Caption);//lbCurFile : TLabel там имя файла в кодировке "лазаруса"
end;
===УСЁ.==
Им можно таскать текст, но я не проверял.
Спасибо pupsik за пост.
Вы себя в "Что, Где, Когда" попробуйте, у Вас скрытый талант :)
Aleh
новенький
 
Сообщения: 53
Зарегистрирован: 08.08.2016 12:27:45


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 249

Рейтинг@Mail.ru