Перетаскивание


В системе Windows FMDD реализуется через интерфейс Shell из библиотеки SHELL32.DLL. При этом используются четыре функции API — DragAcceptFiles, DragQueryFile, DragQueryPoint и DragFinish, а также одно сообщение Windows, WM_DROPFILES. В Delphi сообщение WM_DROPFILES определено в модуле Messages, а функции API — в модуле ShellAPI. Документированный интерфейс относится к клиентам , но не серверам FMDD. Ваша программа сможет принимать файлы, перетаскиваемые из File Manager, но ей не удастся отправить файлы в другую программу.

Типичная реализация FMDD в программе для Windows требует выполнения следующих действий:

  1. При запуске программы вызовите функцию DragAcceptFiles с логическим номером окна и флагом True, чтобы окно могло принимать перетаскивае мые файлы.
  2. При получении окном сообщения WM_DROPFILES выполните следующие действия (поле Msg.wParam в структуре сообщений Object Pascal соответствует логическому номеру области памяти, используемой сообщением WM_DROPFILES):

    a) вызовите функцию DragQueryPoint, чтобы узнать, был ли перетаскивае мый объект брошен в клиентской области окна;

    б) вызовите функцию DragQueryFile с параметром $FFFFFFFF, чтобы определить количество брошенных файлов;

    в) для каждого файла вызовите DragQueryFile, чтобы скопировать его имя во внутренний буфер;

    г) выполните с каждым файлом необходимые действия;

    д) освободите всю внутреннюю память, выделенную при обработке перетаскивания;

    е) вызовите функцию DragFinish, чтобы освободить память, занятую сервером FMDD (то есть File Manager).

  3. При завершении программы вызовите функцию DragAcceptFiles с логическим номером окна и флагом False, чтобы прервать прием файлов окном.

В листингах 3.1 и 3.2 содержится черновой набросок программы, поддерживающей FMDD. На Рисунок 3.1 показано, как выглядит окно готовой программы.



Содержание раздела