<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      在Delphi中接受文件拖放

      [摘要]很不爽的是,用Delphi封裝在Form里的那些東西是沒辦法接受用戶從我的電腦里拖放到你的Form上的文件的,但在做軟件的時候這又是很必要的,我昨天研究了一晚上終于解決了這個問題。 首先,給你的Pr...
      很不爽的是,用Delphi封裝在Form里的那些東西是沒辦法接受用戶從我的電腦里拖放到你的Form上的文件的,但在做軟件的時候這又是很必要的,我昨天研究了一晚上終于解決了這個問題。
      首先,給你的Project加一個Unit,代碼如下:
      unit untDrag;

      interface

      //用來告訴Windows你的Form可以接受文件拖放
      {$EXTERNALSYM DragAcceptFiles}procedure DragAcceptFiles(hWnd: Cardinal; fAccept: Boolean); stdcall;
      //得到拖放文件名和文件個數的API
      {$EXTERNALSYM DragQueryFile}
      function DragQueryFile(hDrop: Cardinal; iFile: Cardinal; lpszFile: PChar; cch: Integer): Integer; stdcall;
      //釋放Windows分配給拖放操作的內存
      {$EXTERNALSYM DragFinish}
      procedure DragFinish(hDrop: Cardinal); stdcall;
      //得到拖放的文件個數
      function GetDragFileCount(hDrop: Cardinal): Integer;
      //得到拖放的文件名,通過FileIndex來指定文件編號,默認為第一個文件
      function GetDragFileName(hDrop: Cardinal; FileIndex: Integer = 1): string;

      implementation

      procedure DragAcceptFiles; external 'Shell32';
      function DragQueryFile; external 'Shell32';
      procedure DragFinish; external 'Shell32';

      function GetDragFileCount(hDrop: Cardinal): Integer;
      const
        DragFileCount=High(Cardinal);
      begin
        Result:= DragQueryFile(hDrop, DragFileCount, nil, 0);
      end;

      function GetDragFileName(hDrop: Cardinal; FileIndex: Integer = 1): string;
      const
        Size=255;
      var
        Len: Integer;
        FileName: string;
      begin
        SetLength (FileName, Size);
        Len:= DragQueryFile(hDrop, FileIndex-1, PChar(FileName), Size);
        SetLength (FileName, Len);
        Result:= FileName;
      end;

      end.

      然后,在你需要處理拖放的Form的OnCreate里面加上這么一句:
      DragAcceptFiles (Handle, True);

      在TForm1的public里面加上如下聲明:
      procedure MyDrag (var Msg: TWMDropFiles); message WM_DropFiles;

      下面是此過程的實現:
      procedure TForm1.MyDrag (var Msg: TWMDropFiles);
      var
        hDrop: Cardinal;
        ...
      begin
        hDrop:= Msg.Drop;  //這個是拖放句柄
        ...(在這里可以用GetDragFileName和GetDragFileCount)
        //最后記得要用這兩句話:
        DragFinish (hDrop);
        Msg.Result:= 0;
      end;

      當然,要在Form的Unit上面加上
      uses untDrag;


      日韩精品一区二区三区高清