它们的函数原形如下:
VOID DragAcceptFiles(
HWND hWnd, // 接受拖拽文件窗口的句柄
BOOL fAccept // 接受条件
true = 打开,false = 关闭
);
UINT DragQueryFile(
HDROP hDrop, // 指向 DragDrop 结构的指针
UINT iFile, //
拖拽文件的索引
LPTSTR lpszFile, // 文件名字串缓冲
UINT cch // 文件名长度
);
VOID DragFinish(
HDROP hDrop // 释放 DragDrop
的内存块
);
从浏览窗口获取一个 DragDrop 文件的流程为:首先用 DragAcceptFiles 函数激活接受窗口的
DragFropAcceptance 属性,然后重载 Windows 的 WM_DROPFILES 消息,在 WM_DROPFILES
消息处理机制里利用 DragAcceptFiles函数分析拖拽文件的详细情况。最后释放掉 DragDrop 结构的内存块,在 WM_DROPFILES
消息的 WParam 参数就指向这个 DragDrop 的内存地址。当 DragDrop 的文件数不止一个时,只消简单的循环 DragQueryFile
就行。
范例:
unit Unit1;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure
FormCreate(Sender: TObject);
protected
procedure WMDROPFILES (var Msg:
TMessage); message WM_DROPFILES; //重载 Windows 的 WM_DROPFILES 消息
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
uses shellapi;
{$R *.DFM}
procedure TForm1.WMDROPFILES (var Msg: TMessage);
var i,nfiles,
size : integer;
Dateiname : PChar;
begin
inherited;
nfiles := DragQueryFile(Msg.WParam, $FFFFFFFF, Dat ame, 255);
// nfiles 保存 DragDrop 的文件数
for i := 0 to (nfiles - 1) do begin
size :=
DragQueryFile(Msg.WParam, i , nil, 0) 1; // 先知道文件名长度
Dateiname:=
StrAlloc(size);
DragQueryFile(Msg.WParam,i , Dateiname, size);
listbox1.items.add(StrPas(Dateiname));
StrDispose(Dateiname);
end;
DragFinish(Msg.WParam);
end;
procedure TForm1.FormCreate(Sender:
TObject);
begin
DragAcceptFiles( Handle, true );
end;
end.
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



