Delphi如何将一个文件写到剪贴板?

5 | 匿名 |浏览376次
检举|收藏|2016/04/02 13:46

想实现Delphi往剪贴板里写一个文件的功能,就类似于Ctrl+C文件的效果,具体要怎么实现呢操作剪贴板呢?

全部回答(1)
  • 可以使用如下代码实现:

    procedure CutOrCopyFiles(const AFileName: String; const IsCopy: Boolean = True);
    var
      hGblFileList: hGlobal;
      pFileListDate: Pbyte;
      HandleDropEffect: UINT;
      hGblDropEffect: hGlobal;
      pdwDropEffect: PDWORD;
      iLen: Integer;
      LFileName: AnsiString;
    begin
      LFileName := AnsiString(AFileName) + #0;
      iLen := Length(LFileName) * SizeOf(AnsiChar);
      hGblFileList := GlobalAlloc(GMEM_ZEROINIT or GMEM_MOVEABLE or GMEM_SHARE, SizeOf(TDropFiles) + iLen + 1);
      pFileListDate := GlobalLock(hGblFileList);
      try
        PDropFiles(pFileListDate)^.pfiles := SizeOf(TDropFiles);
        PDropFiles(pFileListDate)^.pt.Y := 0;
        PDropFiles(pFileListDate)^.pt.X := 0;
        PDropFiles(pFileListDate)^.fNC := False;
        PDropFiles(pFileListDate)^.fwide := False;
        Inc(pFileListDate, SizeOf(TDropFiles));
        CopyMemory(pFileListDate, @LFileName[1], iLen);
        Inc(pFileListDate, iLen);
        PAnsiChar(pFileListDate)^ := #0;
      finally
        GlobalUnlock(hGblFileList);
      end;
      HandleDropEffect := RegisterClipboardFormat('Preferred DropEffect');
      hGblDropEffect := GlobalAlloc(GMEM_ZEROINIT or GMEM_MOVEABLE or GMEM_SHARE, SizeOf(DWORD));
      pdwDropEffect := GlobalLock(hGblDropEffect);
      try
        if IsCopy then
          pdwDropEffect^ := DROPEFFECT_COPY
        else
          pdwDropEffect^ := DROPEFFECT_MOVE;
      finally
        GlobalUnlock(hGblDropEffect);
      end;
      if OpenClipboard(0) then
      begin
        EmptyClipboard();
        SetClipboardData(HandleDropEffect, hGblDropEffect);
        SetClipboardData(CF_HDROP, hGblFileList);
        CloseClipboard();
      end;
    end;


    回答于 2016/04/02 13:53
0人关注该问题



 加载中...