Drag&Drop файлов из FileManager в приложение Delphi

Для использования такого File Manager Drag&Drop, добавьте метод в форму, который будет обрабатывать сообщение WM_DROPFILES. Например, поместите в секцию private в декларации TForm1 строку:

... procedure WMDropFiles(var msg : TMessage); message WM_DROPFILES; ...

Вы должны активировать drag&drop вызовом процедуры DragAcceptFiles() в обработчике события OnCreate, и деактивировать последующим вызовом DragAcceptFiles() в обработчике события OnClose или OnDestroy.

Пример:

       
procedure TForm1.WMDropFiles(var Msg : TMessage);
var
  i, n  : Word;
  Size  : Word;
  FName : String;
  HDrop : Word;

begin
  {1. Получить handle того, что бросили на форму}
  HDrop := Msg.WParam;

  {2. Сколько файлов брошено?}
  n := DragQueryFile(HDrop, $FFFF, NIL, 0);

  {3. Цикл чтения имен файлов}
  for i := 0 to (n - 1) do begin

    {4. Получить размер имени файла}
    Size := DragQueryFile(HDrop, i, NIL, 0);

    {5. Размер строки<255 символов?}
    if Size < 255 then begin
      FName[0] := Chr(Size);
      {6. Получить имя файла}
      DragQueryFile(HDrop, i, @FName[1], Size + 1);
      {-- Далее делаете все, что хотите с этим файлом. --}
    end;

  end;
  {7. Возвращаем ноль.}
  Msg.Result := 0;
  {8. Вызов унаследованного обработчика сообщения}
  inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, true);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DragAcceptFiles(Handle, false);
end;
Помните, что это все относится не обязательно к окну. Любой объект, имеющий свойство HWnd (наследник TWinControl) может принимать файлы при drag&drop.

Для того, чтобы минимизированное приложение отвечало на drag&drop файлов, нужно использовать Application.Handle. В этом случае требуется создать обработчик события OnMessage, который следит за сообщением WM_DROPFILES.

Используются технологии uCoz