03 April 2009

Drag Files

If you want to let your users drag and drop files on your program from the File Manager
and Windows Explorer, simply add the code inside //>>> and //<<< style="font-size:85%;">unit dropfile;

interface

uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

//>>>

// declare our DROPFILES message handler
procedure AcceptFiles( var msg : TMessage );
message WM_DROPFILES;
//<<<
end;

var
Form1: TForm1;

implementation

uses
//>>>
//
// this unit contains certain
// functions that we'll be using
//
ShellAPI;
//<<<

{$R *.DFM}

//>>>
procedure TForm1.AcceptFiles( var msg : TMessage );
const
cnMaxFileNameLen = 255;
var
i,
nCount : integer;
acFileName : array [0..cnMaxFileNameLen] of char;
begin
// find out how many files we're accepting
nCount := DragQueryFile( msg.WParam,
$FFFFFFFF,
acFileName,
cnMaxFileNameLen );

// query Windows one at a time for the file name
for i := 0 to nCount-1 do
begin
DragQueryFile( msg.WParam, i,
acFileName, cnMaxFileNameLen );

// do your thing with the acFileName
MessageBox( Handle, acFileName, '', MB_OK );
end;

// let Windows know that you're done
DragFinish( msg.WParam );
end;
//<<<

procedure TForm1.FormCreate(Sender: TObject);
begin
//>>>
//
// tell Windows that you're
// accepting drag and drop files
//
DragAcceptFiles( Handle, True );
//<<<
end;

end.

Now you can drag and drop files on the form that you registered as a recipient of dropped
files by calling the "DragAcceptFiles()" function as in the above example.