Библиотека программиста

18.04.2024 - Drag and Drop файлов в программу

Графический интерфейс операционной системы Windows поддерживает копирование (перенос) файлов при помощи мыши. Это реализуется технологией Drag and Drop. Если ваша программа много работает с файлами, то можно облегчить процесс открытия файлов. Метод Drag and Drop позволяет отказаться от стандартной схемы открытия файлов при помощи диалогов открытия файлов.

Используя Drag'n'Drop вы можете перенести мышью объект рабочего стола (проводника) на форму программы и этот объект будет найден и обработан. Технология Drag and Drop поддерживает следующие объекты: файлы, папки, ярлыки, ссылки интернет и др. Функция Drag'n'Drop является родной функцией проводника (Windows Explorer),
то есть она поддерживается не операционной системой, оболочкой. Поэтому, если вы пользуетесь другой оболочкой (напр. DesqView), то поддержка Drag and Drop не гарантируется.


Реализация


Для того, чтобы реализовать этот метод на Delphi, необходимо:

1) Подключить модуль ShellApi в секции Uses в Unit1 формы.
2) Затем в Unit1, найти оператор private и выше него добавить следующие строки:

Код
...
protected
Procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles;
...


3) Добавить в Unit1 процедуру WMDropFiles и ввести её тело:

Код
Procedure TForm1.WMDropFiles(var Msg: TMessage);
var
Filename: array[0 .. 256] of Char;
FileStr: string;
begin
{ Получаем имя первого файла }
DragQueryFile( THandle(Msg.WParam), 0, Filename, sizeof(Filename) ) ;
{ Открываем его }
FileStr:=LowerCase(StrPas(FileName));
{ Подсветка окна }
FlashWindow(Form1.Handle,true);
{ Отдаем сообщение о завершении процесса }
DragFinish(THandle(Msg.WParam));
...
{Здесь вы можете ввести код работы с файлом}
...
end;



4) Чтобы форма могла принимать объекты, необходимо в обработчик события OnCreate, записать:

Код
DragAcceptFiles(Handle, True);



Заключение

Технология Drag and Drop очень облегчает работу с такими программами, как кодировщики музыки, интернет-качалки, файловые утилиты и архиваторы.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=310