Сделайте форму приемником файлов.
Форма должна обрабатывать сообщение WM_DROPFILES.
В этой процедуре определяете имена файлов с помощью функции DropQueryFiles и делаете с ними что хотите.
По окончании работы с формой запрещаем перетаскивание на нее файлов.
В этом примере имена перетащенных файлов помещаются в Memo:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure WMDROPFILES(var Msg: TMessage); message WM_DROPFILES;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Uses
ShellAPI;
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
Filename : Array [0 .. 256] of Char;
Count, i : Integer;
P : TPoint;
begin
// Число перетаскиваемых файлов
Count := DragQueryFile(Msg.WParam, $FFFFFFFF, Filename, SizeOf(Filename));
Memo1.Clear;
for i := 0 to Count - 1 do begin
// Запрос имени файла
DragQueryFile(Msg.WParam, i, Filename, SizeOf(Filename));
Memo1.Lines.Add(Filename);
end;
// Заканчиваем перетаскивание
DragFinish(Msg.WParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Handle, False);
end;
end.