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

  • 相关阅读:
    前端优化方法(全)
    前端工程化
    HTTP状态码
    TCP三次握手和四次挥手
    在浏览器输入url后并回车发生了哪些过程
    javascript异步编程
    为什么浏览器采用多进程模型
    LeetCode——最长回文子串?
    LeetCode——字符串的排列/找到字符串中所有字母异位词
    LeetCode——24 点游戏
  • 原文地址:https://www.cnblogs.com/guorongtao/p/13814542.html
Copyright © 2020-2023  润新知