在Delphi中支持文件拖放的程序
文件管理器或资源管理器向程序Project1发一个WM_ DROPFILES消息,Project1获取WM_ DROPFILES消息后调用WinAPI函数DragAcceptFiles()、DragQueryFile()处理WM_ DROPFILES消息。
以下是用Delphi实现这个功能的过程:
1.新建一个工程Project1,在Unit1的uses保留字后加上ShellApi单元。
2.在Form1的OnCreate事件中添加下面一行,使Form1可以接收WM_ DROPFIELS消息。
DragAcceptFiles(Form1.Handle, True);
3.从构件面板上拖一个Memo1到Form1上,设Memo1的Align属性为alClient。
4.在Form1的公有域添加如下代码,声名一个处理WM_ DROPFIELS消息的过程。
public
{Public declarations}
procedure WMDropFiles(var message:TMessage);message WM_ DROPFILES;
end;
5.在implementation后面编写过程WMDropFiles()的代码。
procedure Tform1.WMDropFiles(var message:TMessage);
var
P:array[0..254] of Char;
I:word;
begin
Inherited;
Memo1.Lines.Clear;
{$IFDEF WIN32}
I:=DragQueryFile(Message.wParam,$ffffffff,nil,0);
{$ELSE}
I:=DragQueryFile(Message.wParam,$ffff,nil,0);
{$ENDIF}
Caption:=IntToStr(i);
for I:=0 to I-1 do
begin
DragQueryFile(Message.wParam,I,P,255);
Memo1.Lines.Add(StrPas(P));
end;
end;
运行Project1,从Windows 3.X的文件管理器或Windows 95中的资源管理器里拖一些文件或目录到Project1窗口上,释放鼠标左键后可以看到Project1窗口标题上显示了拖放文件或者目录的数目,并且Memo1详细列出这个文件或目录的全路径名。