linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > Delphi >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·HexToStr函数和StrToHex函数
·Delphi中的进制转换
·delphi轻松设置无边框透明窗体
·DELPHI组件安装全攻略
·delphi第三方控件安装(Ehlib)
·delphi动态创建控件
·开发工具比较Visual C++ VS De
·delphi完整身份证效验程序实例
·如何判断文本文件的编码格式
·深入研究Variant数组
·delphi中的Format函数详解
·用delphi编写网络游戏的外挂
·Delphi技巧-用户自定义数据类型
·delphi编程获取打印机的打印任
·delphi设置控件透明
最新文章
·在应用程序中跟踪MOUSE的坐标
·压缩和修复MS Access 2000文件
·DELPHI 6.0 动画制做
·怎样在Delphi中调用LastError信
·怎样得到主域服务器名称
·怎样利用递归实现删除某一目录
·读出主键下所有项
·如何制作照片底片效果的图像(
·获得Modem的状态
·WebBrowser屏幕滚动的实现,设
·有关字符串处理的小技巧
·Delphi建立键盘鼠标动作纪录与
·Delphi中布尔类型辨析
·DELPHI程序注册码设计
·图形的不规则的Copy
Google
 
在Delphi中侦测剪贴板的变化
[ 作者:  加入时间:2007-12-03 14:48:21  来自:Linux联盟收集整理 ]
许多提供剪切、复制和粘贴功能的应用程序都有一个共同特点,那就是:工具栏上表示这三个功能的按钮会随着剪贴板的变化而变化,具体来说,粘贴按钮只有在剪贴板上有内容时才处于使能状态,而当剪贴板空时则变灰,也就是不能使用;相似地,剪切、复制按钮也只有在当前有文本或位图被选择时才有效。那么,这是怎么实现的呢?笔者曾经想在Delphi4.0中放置一个Timer控件,在其OnTimer事件中加入侦测剪贴板变化的代码,但最后放弃了,原因是Timer控件比较消耗系统资源,得不偿失,而且笔者也相信,那些应用程序的源代码也不是这么做的。其实,这个问题的关键在于怎么样响应Windows消息,这里就是响应剪贴板消息。Delphi体贴地将所有的Windows消息都重新定义,令我们可以方便地通过message关键字访问这些消息而不用理会恼人的API。下面,就用一个实例说明Delphi是怎么做的。 NDfLinux联盟
  程序需要一个ToolBar控件,在其上建立三个按钮;一个ImageList控件,为其加入三个小位图,分别表示剪切、复制和粘贴,将ImageList 赋予ToolBar的images属性;一个Memo控件,将其Lines属性置空。以下是程序清单: NDfLinux联盟
  unit Unit1; NDfLinux联盟
  interface NDfLinux联盟
  uses NDfLinux联盟
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, NDfLinux联盟
  StdCtrls,ClipBrd, ComCtrls, ImgList, ToolWin; NDfLinux联盟
  type NDfLinux联盟
   TForm1 = class(Tform) NDfLinux联盟
   ToolBar1: TToolBar; NDfLinux联盟
   ImageList1: TImageList; NDfLinux联盟
   ToolButton1: TToolButton; NDfLinux联盟
   ToolButton2: TToolButton; NDfLinux联盟
   ToolButton3: TToolButton; NDfLinux联盟
   Memo1: Tmemo; NDfLinux联盟
   procedure FormCreate(Sender: Tobject); NDfLinux联盟
   procedure FormDestroy(Sender: Tobject); NDfLinux联盟
   procedure Memo1MouseUp(Sender: Tobject; Button: TMouseButton; NDfLinux联盟
   Shift: TShiftState; X, Y: Integer); NDfLinux联盟
   procedure ToolButton1Click(Sender: Tobject); NDfLinux联盟
   procedure ToolButton2Click(Sender: Tobject); NDfLinux联盟
   procedure ToolButton3Click(Sender: Tobject); NDfLinux联盟
   private NDfLinux联盟
   { Private declarations } NDfLinux联盟
   viewhandle:HWND; NDfLinux联盟
   procedure Change(var msg:TWMdrawclipboard); NDfLinux联盟
   message wm_drawclipboard; NDfLinux联盟
   public NDfLinux联盟
   { Public declarations } NDfLinux联盟
   end; NDfLinux联盟
  var NDfLinux联盟
   Form1: TForm1; NDfLinux联盟
  implementation NDfLinux联盟
  {$R *.DFM} NDfLinux联盟
  procedure TForm1.FormCreate(Sender: Tobject); NDfLinux联盟
  begin NDfLinux联盟
  Memo1.Align:=alClient; NDfLinux联盟
  ToolBar1.Flat:=True; NDfLinux联盟
  viewhandle:=SetClipboardviewer(Handle); NDfLinux联盟
  ToolButton1.Enabled:=False; NDfLinux联盟
  ToolButton2.Enabled:=False; NDfLinux联盟
  end; NDfLinux联盟
  procedure TForm1.FormDestroy(Sender: Tobject); NDfLinux联盟
  begin NDfLinux联盟
  ChangeClipboardChain(Handle,viewhandle); NDfLinux联盟
  end; NDfLinux联盟
  procedure TForm1.Memo1MouseUp(Sender: Tobject; Button: TMouseButton; NDfLinux联盟
   Shift: TShiftState; X, Y: Integer); NDfLinux联盟
  begin NDfLinux联盟
  if Memo1.SelText<>`` then NDfLinux联盟
   begin NDfLinux联盟
   ToolButton1.Enabled:=True; NDfLinux联盟
   ToolButton2.Enabled:=True; NDfLinux联盟
   end NDfLinux联盟
  else NDfLinux联盟
   begin NDfLinux联盟
   ToolButton1.Enabled:=False; NDfLinux联盟
   ToolButton2.Enabled:=False; NDfLinux联盟
   end NDfLinux联盟
  end; NDfLinux联盟
  procedure TForm1.ToolButton1Click(Sender: Tobject); NDfLinux联盟
  begin NDfLinux联盟
   Memo1.CutToClipboard; NDfLinux联盟
  end; NDfLinux联盟
  procedure TForm1.ToolButton2Click(Sender: Tobject); NDfLinux联盟
  begin NDfLinux联盟
   Memo1.CopyToClipboard; NDfLinux联盟
  end; NDfLinux联盟
  procedure TForm1.ToolButton3Click(Sender: Tobject); NDfLinux联盟
  begin NDfLinux联盟
   Memo1.PasteFromClipboard; NDfLinux联盟
  end; NDfLinux联盟
  procedure TForm1.Change(var msg:TWMdrawclipboard); NDfLinux联盟
  begin NDfLinux联盟
  ToolButton3.Enabled:=Clipboard.Hasformat(cf_text) NDfLinux联盟
  end; NDfLinux联盟
  end. NDfLinux联盟
  注意程序中的关键字:message,它使Change过程可以响应剪贴板消息, NDfLinux联盟
即剪贴板中有文本内容时粘贴按钮有效,反之无效;而剪切、复制按钮的状 NDfLinux联盟
态在Memo1的MouseUp事件中响应。程序中的SetClipboardviewer函数用来登 NDfLinux联盟
陆剪贴板,ChangeClipboardChain函数用来退出剪贴板。另外还有一点要说 NDfLinux联盟
明的是:由于代码中有剪贴板类的操作,因此Uses子句中要加上ClipBrd。NDfLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·delphi中的快捷键大收集  (2007-12-03 14:44:45)
 ·如何为Delphi程序添加事件和事件处理器  (2007-12-03 14:44:11)
 ·DELPHI中线程的初步探索  (2007-12-03 14:43:37)
 ·delphi端口扫描  (2007-12-03 14:39:06)
 ·DELPHI 中的规则表达式  (2007-12-03 14:37:59)
 ·面向对象编程与Delphi技术浅入讨论  (2007-12-03 14:34:41)
 ·delphi函数参考手册  (2007-11-26 14:31:15)
 ·Delphi中关于TApplication类的详解  (2007-11-26 14:30:15)
 ·Delphi包的使用  (2007-11-26 14:29:50)
 ·Delphi中的INI文件编程  (2007-11-26 14:26:46)