中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
如何将文件拷贝到剪贴板
作者:未知 时间:2005-08-07 20:59 出处:编程爱好者网站 责编:chinaitpower
              摘要:如何将文件拷贝到剪贴板
怎样判断当前剪贴板中的内容为文件,如何将指定文件(不是文件内容)拷贝到剪贴板中。请问各位大侠:怎样判断当前剪贴板中的内容为文件,如何将指定文件(不是文件内容)拷贝到剪贴板中。
int GetClipboardFormatName(
  UINT format,            // clipboard format to retrieve
  LPTSTR lpszFormatName,  // address of buffer for name
  int cchMaxCount         // length of name string in characters
);
如果format=CF_HDROP就是文件了

HANDLE SetClipboardData(
  UINT uFormat, // clipboard format
  HANDLE hMem   // data handle
);

menxin的方案是可行的.Delphi定义了两个格式:CF_PICTURE和CF_COMPONENT.
用户可以定义自己的格式.不过因为Formats是WORD格式,所以系统中只能有
16种格式.打开ClipBrd单元,可以查到.
  CF_PICTURE := RegisterClipboardFormat('Delphi Picture');
  CF_COMPONENT := RegisterClipboardFormat('Delphi Component');
你添加:
  CF_MYFILE := RegisterClipboardFormat(' My File Format');

剪贴板操作:
打开;
清空;
SetFormatData(CF_TEXT)  --->文件名;
SetFormatData(CF_MYFILE)  --->文件内容
关闭;

如果你只对文件名感兴趣,那只是一个文本格式.取出内容,用FileExists查询
是否存在即可.
registerClipboardFormat函数登记新的剪贴板格式
格式的值在OXC000和0XFFF范围
IsClipboardFormatAvailable函数判断剪贴板是否包含指定格式数据
格式可用返回非零值
windows是有定义:
可以用cf_Hdrop;

uses shlobj,activex,clipbrd;

procedure TForm1.Button1Click(Sender: TObject);
var
  FE:TFormatEtc;
  Medium: TStgMedium;
  FileName:String;
  dropfiles:PDropFiles;
  pFile:PChar;
begin
  FileName:='c:\1.bmp';
  FE.cfFormat := CF_HDROP;
  FE.dwAspect := DVASPECT_CONTENT;
  FE.tymed := TYMED_HGLOBAL;
  Medium.hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_ZEROINIT, SizeOf(TDropFiles)+length(FileName)+1);
  if Medium.hGlobal<>0 then begin
    Medium.tymed := TYMED_HGLOBAL;
    dropfiles := GlobalLock(Medium.hGlobal);
    try
      dropfiles^.pfiles := SizeOf(TDropFiles);
      dropfiles^.fwide := False;
      longint(pFile) := longint(dropfiles)+SizeOf(TDropFiles);
      StrPCopy(pFile,FileName);
      Inc(pFile, Length(FileName)+1);
      pFile^ := #0;
    finally
      GlobalUnlock(Medium.hGlobal);
    end;
    Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal);
  end;
end;

参照dragdrop做了一个,还不错.
上面这个例子把filename这个文件放在了clipboard上

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有