Delphi WinAPI DragAcceptFiles、DragQueryFile、DragFinish、DragQueryPoint - 文件拖拽功能
--Delphi
uses
shellAPI;
--WinAPI
shellapi.h
1、DragAcceptFiles -注册窗口是否接受丢弃的文件。
原型:
void DragAcceptFiles(
HWND hWnd, //句柄
BOOL fAccept //true接收 false丢弃
);
2、DragQueryFile - 检索由于成功的拖放操作的文件的名称。
原型:
UINT DragQueryFileA(
HDROP hDrop, //包含已删除文件的文件名的结构的标识符。
UINT iFile, //要查询的文件的索引。如果此参数的值为0xFFFFFFFF,DragQueryFile将返回丢弃的文件的计数。如果此参数的值介于0和丢弃的文件总数之间,DragQueryFile将文件名和相应的值复制到lpszFile参数指向的缓冲区。
LPSTR lpszFile, //当函数返回时接收被删除文件的文件名的缓冲区的地址。此文件名是以空结尾的字符串。如果此参数为NULL,DragQueryFile将返回此缓冲区所需的大小(以字符为单位)。
UINT cch //缓冲区的大小(以字符为单位)
);
返回值:非零值表示调用成功。
3、DragFinish - 释放系统分配用于将文件名传输到应用程序的内存。
原型:
void DragFinish(
HDROP hDrop //描述丢弃文件的结构的标识符。此句柄从WM_DROPFILES消息的wParam参数检索。
);
4、DragQueryPoint - 检索在拖放操作期间删除文件时鼠标指针的位置。
原型:
BOOL DragQueryPoint(
HDROP hDrop, //句柄
POINT *ppt //指向一个点结构的指针,当此函数成功返回时,该结构将接收删除文件时鼠标指针的坐标。
);
5、Delphi 示例:
public
procedure TFfile(var Msg:TMessage);message WM_DROPFILES; //WM_DROPFILES 拖拽文件消息
uses
shellAPI;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Self.Handle,true); //窗体注册拖放文件功能
end;
5.1 单文件拖拽
procedure TForm1.TFfile(var Msg: TMessage);
var
buffer:array[0..1024] of Char;
begin
inherited;
buffer[0]:=#0;
DragQueryFile(Msg.WParam,0,buffer,sizeof(buffer)); //获取拖入文件名称
Edit1.Text:=PChar(@buffer); //字符数组转换成字符串
end;
5.2 多文件拖拽
procedure TForm1.TFfile(var Msg: TMessage);
var
FilesCount: Integer;// 文件总数
i: Integer;
buffer:array[0..1024] of Char;
begin
try
buffer[0]:=#0;
FilesCount:=DragQueryFile(Msg.WParam, $FFFFFFFF,nil,0); //获取文件个数
Memo1.Lines.Add('文件总数为:'+IntToStr(FilesCount));
// 循环获取文件名
for i:=0 to FilesCount-1 do
begin
DragQueryFile(Msg.WParam, i, buffer,256); //获取拖拽文件路径名称
Memo1.Lines.Add(buffer);
end;
finally
DragFinish(Msg.WParam);
end;
end;
创建时间:2020.10.14 更新时间: