如题

解决方案 »

  1.   

    我是这样把文件添加到粘贴板的
    procedure SetFilesToClipboard(FileList: string);
    var
      DropFiles: PDropFiles;
      hGlobal: THandle;
      iLen: Integer;
    begin          
      iLen := Length(FileList);
      hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,
        SizeOf(TDropFiles) + iLen);
      if hGlobal <> 0 then
      begin
        DropFiles := GlobalLock(hGlobal);
        DropFiles^.pFiles := SizeOf(TDropFiles);
        Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
        GlobalUnlock(hGlobal);
        Clipboard.Open;
        try
          Clipboard.Clear;
          Clipboard.SetAsHandle(CF_HDROP, hGlobal);
        finally
          Clipboard.Close;
        end;
      end;
    end;
    但是怎样将文件“剪切”到粘贴板呢?
    各位高手请指教
      

  2.   

    type
      PDropFiles = ^TDropFiles;
      TDropFiles = record
        pFiles: DWORD;                       { offset of file list }
        pt: TPoint;                          { drop point (client coords) }
        fNC: BOOL;                           { is it on NonClient area }{ and pt is in screen coords }
        fWide: BOOL;                         { WIDE character switch }
      end;const
      DROPEFFECT_COPY   = 1;
      DROPEFFECT_MOVE   = 2;
    procedure CutOrCopyFiles(pFileList: Pchar; ListStrLen: integer; bCopy: Boolean);
    var
    hGblFileList: HGLOBAL; // 内存块句柄
      pFileListDate: Pbyte;      // 内存块地址 HandleDropEffect: UINT;    // 注册类型句柄
      hGblDropEffect: HGLOBAL;   // 内存块句柄
      pdwDropEffect: PDWORD;     // 操作类型标识
    begin
    hGblFileList := GlobalAlloc(GMEM_ZEROINIT or GMEM_MOVEABLE or  GMEM_SHARE, ListStrLen+Sizeof(TDropFiles));
    pFileListDate := GlobalLock(hGblFileList);
      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,pFileList,ListStrLen);
    GlobalUnlock(hGblFileList); HandleDropEffect := RegisterClipboardFormat('Preferred DropEffect');
    hGblDropEffect := GlobalAlloc(GMEM_ZEROINIT or GMEM_MOVEABLE or  GMEM_SHARE, sizeof(DWORD));
    pdwDropEffect := GlobalLock(hGblDropEffect);
    if(bCopy) then
    pdwDropEffect^ := DROPEFFECT_COPY
    else
    pdwDropEffect^ := DROPEFFECT_MOVE;
    GlobalUnlock(hGblDropEffect); if OpenClipboard(0) then
    begin
    EmptyClipboard();
    SetClipboardData(HandleDropEffect,hGblDropEffect);
    SetClipboardData( CF_HDROP, hGblFileList );
    CloseClipboard();
    end
      else
        showmessage('无法打开,可能被别的程序占用');
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      CutOrCopyFiles('c:\test\1.txt'+#0+'c:\test\2.txt'+#0,28,false);
    end;
      

  3.   

    to:  cuteant(我这张旧船票能否登上你的破船|涛声是否依旧) 
    谢谢!不愧是高手!
    能不能给个粘贴的函数?
      

  4.   

    写的时候是SetClipboardData
    读的时候用GetClipboardData