Использование мыши при работе с файлами (Drag & Drop)

Большинство программ, преднозначенных для работы с текстом, предоставляют пользователю возможность перетаскивать имена файлов из "Проводника" (или других программ) в Memo или другой компонент, содержащийся в приложении. о умолчанию Delphi не позволяет перемещать файлы с помощью мыши, но, приложив небольшие усилия, такую возможность можно реализовать.

Первое, что вы должны сделать, - сообщить системе Windows о том, что ваша программа готова обрабатывать файлы, перемещенные из другого приложения с помощью мыши. Для этого достаточно включить в обработчик события OnCreate формы следующее выражение:

DragAcceptFiles(Handle,True);


Кроме того вы должны указать модель ShellAPI в директиве uses.

Для любого окна, в котором была вызвана процедура DragAcceptFiles, справедливо следующее. Когда вы перетаскиваете имя файла на ваше приложение и отпускаете кнопку мыши, Windows посылает этому окну сообщение wm_DropFiles. Сооьщение сопровождается именем файла. Обработчик этого сообщения нужно включитьв защищенный раздел класса формы. например, в объявлении класса формы между ключвыми словами private и public добавьте следующие строки:


protected  
   procedure WMDropFiles (var Msg: TMessage);  
   message wm_DropFiles;

И наконец-то пример самой процедуры, при помощи которой будет происходить обработка файла:


protected  
   procedure WMDropFiles (var Msg: TMessage);  
   message wm_DropFiles;  

И наконец-то пример самой процедуры, при помощи которой будет происходить обработка файла:


procedure TForm1.WMDropFiles(var Msg: TMessage);  
Var  
    Filename: array[0..256] of char;  
begin  
  
   DragQueryFile(THandle(Msg.WParam),0,Filename,SizeOf(Filename));  
   // Теперь в переменной Filename будет находиться путь  
   // к перетаскиваемому файлу. Далее вы можете выполнять с этим файлом, зная  
   // его путь, все что угодно.  
  
   //Например: Загрузить его в Memo  
   Memo1.lines.loadfromfile(Filename);  
  
   //Сообщаем об окончании претаскивания  
   DragFinish(THandle(Msg.WParam));  
end;  
Теги:
Drag & Drop
Добавлено: 31 Июля 2018 07:32:37 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...