Enable dropping files onto your application
2005-06-08 22:18 i96 [permalink]
Check if the Messages
and ShellApi
units are included in the uses
clause in the start of your unit.
Add a call to DragAcceptFiles
in the initialization of the form (OnCreate
or OnShow
).
Add this bit to the protected
clause in the form class declaration. By default there is no need for a protected
clause, so if it's missing, type protected
at the same level of public
or private
.
procedure FormDropFiles(var Msg:TWMDropFiles); message WM_DROPFILES;
Declare the method something like this, adapt where neccessary to fit in your application.
procedure TMainWin.FormDropFiles(var Msg: TWMDropFiles);
var
i,FileCount,FileNameSize:integer;
FileName:string;
begin
FileCount:=DragQueryFile(Msg.Drop,-1,nil,0);
for i:=0 to FileCount-1 do
begin
FileNameSize:=DragQueryFile(Msg.Drop,i,nil,0)+1;
SetLength(FileName,FileNameSize);
DragQueryFile(Msg.Drop,i,@FileName[1],FileNameSize);
//skip closing #0 char
SetLength(FileName,FileNameSize-1);
//do something with FileName here...
end;
DragFinish(Msg.Drop);
end;
If you only need one file, you can skip the for loop and just use DragQueryFile(Msg.Drop,0,,);