Delphi WinAPI DragAcceptFiles、DragQueryFile、DragFinish、DragQueryPoint

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  更新时间:

原文地址:https://www.cnblogs.com/guorongtao/p/13814542.html