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 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 打印纸张选项设置参数