می تونی با پردازش پیغام WM_DROPFILES این کار رو انجام بدی. باید اول برنامه ات را به عنوان برنامه ایی که فایل های درگ شده را قبول میکنه رجیستر کنی و یه Message Handler هم برای WM_DROPFILES بسازی و توش با استفاده از DragQueryFiles نام و تعداد فایلهای درگ شده را بدست بیاری. تمام توابع فوق در یونیت ShellAPI تعریف شدند و نحوه استفاده از اونها در Windows SDK توضیح داده شده.
نمونه ای از کدی که فایلهای درگ شده را به لیست باکس اضافه میکنه:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
ShellAPI {ShellAPI is rquired};
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
//WM_DROPFILES is sent to any window that is registered to accept draged
//files from explorer.
procedure WMDROPFILES(var MSG : TMessage); message WM_DROPFILES;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//Register the main window to accept draged files
DragAcceptFiles(Handle,True);
end;
procedure TForm1.WMDROPFILES(var MSG: TMessage);
var
hDrop : integer; //Drag data
FileCount : integer;
FileName : Array[ 0..Max_Path] of char; //Buffer
Index : integer; //Index of the file
begin
//WParam contains a pointer to the drag info. This data is created by Windows
//and must be freed by DragFinish.
hDrop := Msg.WParam;
//Passing $FFFFFFFF to DragQueryFile returns the numnber of files which are
//draged.
FileCount := DragQueryFile(hDrop,$FFFFFFFF,FileName,SizeOf(File Name));
//iterate in the draged files list and add each file to the listbox.
Index := 0;
repeat
//Get file name for each item.
//DragQueryFile returns the number of bytes returned as the file name. If
//is 0 then no data is returned and an error has been accured.
if DragQueryFile(hDrop,Index,FileName,SizeOf(FileName )) > 0 then
ListBox1.Items.Add(FileName)
else
raise Exception.Create('File Drag Error');
Inc(Index);
until Index = FileCount;
//Free the drag data
DragFinish(hDrop);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Sorted := True;
ListBox1.Sorted := False;
end;
end.
فرم بالا شامل یک لیست باکس و 2 دکمه هست که از دکمه ها برای پاک کردن محتوای لیست باکس و مرتب کردن محتوی اون استفاده میشه.