Delphi WinAPI DragAcceptFiles、DragQueryFile、DragFinish、DragQueryPoint - 文件拖拽功能

Delphi WinAPI DragAcceptFiles、DragQueryFile、DragFinish、DragQueryPoint  - 文件拖拽功能

1
2
3
4
5
--Delphi
uses
    shellAPI;
--WinAPI
shellapi.h 

1、DragAcceptFiles -注册窗口是否接受丢弃的文件。

原型:

1
2
3
4
void DragAcceptFiles(
  HWND hWnd,   //句柄
  BOOL fAccept   //true接收 false丢弃
);

  

2、DragQueryFile  - 检索由于成功的拖放操作的文件的名称。

原型:

1
2
3
4
5
6
UINT DragQueryFileA(
  HDROP hDrop,   //包含已删除文件的文件名的结构的标识符。
  UINT  iFile,    //要查询的文件的索引。如果此参数的值为0xFFFFFFFF,DragQueryFile将返回丢弃的文件的计数。如果此参数的值介于0和丢弃的文件总数之间,DragQueryFile将文件名和相应的值复制到lpszFile参数指向的缓冲区。
  LPSTR lpszFile,   //当函数返回时接收被删除文件的文件名的缓冲区的地址。此文件名是以空结尾的字符串。如果此参数为NULL,DragQueryFile将返回此缓冲区所需的大小(以字符为单位)。
  UINT  cch   //缓冲区的大小(以字符为单位)
);

返回值:非零值表示调用成功。  

 

3、DragFinish - 释放系统分配用于将文件名传输到应用程序的内存。

原型:

1
2
3
void DragFinish(
  HDROP hDrop   //描述丢弃文件的结构的标识符。此句柄从WM_DROPFILES消息的wParam参数检索。
);

  

4、DragQueryPoint - 检索在拖放操作期间删除文件时鼠标指针的位置。

原型:

1
2
3
4
BOOL DragQueryPoint(
  HDROP hDrop,  //句柄
  POINT *ppt  //指向一个点结构的指针,当此函数成功返回时,该结构将接收删除文件时鼠标指针的坐标。
);

 

5、Delphi 示例:

1
2
3
4
5
6
7
8
9
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 单文件拖拽

1
2
3
4
5
6
7
8
9
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 多文件拖拽

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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  更新时间:

 

posted on   滔Roy  阅读(964)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
历史上的今天:
2019-10-14 Delphi 打印纸张选项设置参数

导航

点击右上角即可分享
微信分享提示