网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: ASP学习资源 >> 网站开发 >> Delphi教程 >> 文章正文
  在Delphi中侦测剪贴板的变化            【字体:
在Delphi中侦测剪贴板的变化
      
    许多提供剪切、复制和粘贴功能的应用程序都有一个共同特点,那就是:工具栏上表示这三个功能的按钮会随着剪贴板的变化而变化,具体来说,粘贴按钮只有在剪贴板上有内容时才处于使能状态,而当剪贴板空时则变灰,也就是不能使用;相似地,剪切、复制按钮也只有在当前有文本或位图被选择时才有效。那么,这是怎么实现的呢?笔者曾经想在Delphi4.0中放置一个Timer控件,在其OnTimer事件中加入侦测剪贴板变化的代码,但最后放弃了,原因是Timer控件比较消耗系统资源,得不偿失,而且笔者也相信,那些应用程序的源代码也不是这么做的。其实,这个问题的关键在于怎么样响应Windows消息,这里就是响应剪贴板消息。Delphi体贴地将所有的Windows消息都重新定义,令我们可以方便地通过message关键字访问这些消息而不用理会恼人的API。下面,就用一个实例说明Delphi是怎么做的。
  程序需要一个ToolBar控件,在其上建立三个按钮;一个ImageList控件,为其加入三个小位图,分别表示剪切、复制和粘贴,将ImageList 赋予ToolBar的images属性;一个Memo控件,将其Lines属性置空。以下是程序清单:
  unit Unit1;
  interface
  uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,ClipBrd, ComCtrls, ImgList, ToolWin;
  type
   TForm1 = class(Tform)
   ToolBar1: TToolBar;
   ImageList1: TImageList;
   ToolButton1: TToolButton;
   ToolButton2: TToolButton;
   ToolButton3: TToolButton;
   Memo1: Tmemo;
   procedure FormCreate(Sender: Tobject);
   procedure FormDestroy(Sender: Tobject);
   procedure Memo1MouseUp(Sender: Tobject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
   procedure ToolButton1Click(Sender: Tobject);
   procedure ToolButton2Click(Sender: Tobject);
   procedure ToolButton3Click(Sender: Tobject);
   private
   { Private declarations }
   viewhandle:HWND;
   procedure Change(var msg:TWMdrawclipboard);
   message wm_drawclipboard;
   public
   { Public declarations }
   end;
  var
   Form1: TForm1;
  implementation
  {$R *.DFM}
  procedure TForm1.FormCreate(Sender: Tobject);
  begin
  Memo1.Align:=alClient;
  ToolBar1.Flat:=True;
  viewhandle:=SetClipboardviewer(Handle);
  ToolButton1.Enabled:=False;
  ToolButton2.Enabled:=False;
  end;
  procedure TForm1.FormDestroy(Sender: Tobject);
  begin
  ChangeClipboardChain(Handle,viewhandle);
  end;
  procedure TForm1.Memo1MouseUp(Sender: Tobject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
  begin
  if Memo1.SelText<>`` then
   begin
   ToolButton1.Enabled:=True;
   ToolButton2.Enabled:=True;
   end
  else
   begin
   ToolButton1.Enabled:=False;
   ToolButton2.Enabled:=False;
   end
  end;
  procedure TForm1.ToolButton1Click(Sender: Tobject);
  begin
   Memo1.CutToClipboard;
  end;
  procedure TForm1.ToolButton2Click(Sender: Tobject);
  begin
   Memo1.CopyToClipboard;
  end;
  procedure TForm1.ToolButton3Click(Sender: Tobject);
  begin
   Memo1.PasteFromClipboard;
  end;
  procedure TForm1.Change(var msg:TWMdrawclipboard);
  begin
  ToolButton3.Enabled:=Clipboard.Hasformat(cf_text)
  end;
  end.
  注意程序中的关键字:message,它使Change过程可以响应剪贴板消息,即剪贴板中有文本内容时粘贴按钮有效,反之无效;而剪切、复制按钮的状态在Memo1的MouseUp事件中响应。程序中的SetClipboardviewer函数用来登陆剪贴板,ChangeClipboardChain函数用来退出剪贴板。另外还有一点要说明的是:由于代码中有剪贴板类的操作,因此Uses子句中要加上ClipBrd。

  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    DELPHI:利用INI文件实现界面…
    巧用日期转换函数验证用户输…
    在Delphi 7 中用Indy开发Soc…
    在Delphi中用ADSI创建IIS的虚…
    在DELPHI程序中拨号上网
    用Delphi 开发数据库程序经验…
    Delphi实现远程屏幕抓取
    改变VCL的行为--一个使用可视…
    怎样用delphi制作一个IPhunt…
    TWebBrowserTWebBrowser与MS…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    企业专区
    司法考试
    经济论文
    国内资讯
    两性知识
    健康知识
    现代文学
     
    行业资讯
    案例判例
    教育论文
    国外资讯
    性爱技巧
    保健养生
    网络文学
     
    行销知识
    理论研究
    社会论文
    游戏策划
    两性生理
    两性健康
    古典文学
     
    行销实战
    司法解释
    财税论文
    程序教程
    两性心理
    心理健康
    武侠言情
     
    行销资源
    样本范本
    证券论文
    美术教程
    孕育知识
    心理测试
    科幻小说
     
    网络广告
    法规大全
    医学论文
    手机游戏
    两性误区
    家庭医生
    侦探恐怖
     
    电信产业
    法律论文
    管理论文
    移动平台
    两性故事
    老年保健
    纪实文学
     
    投资信息
    法律咨询
    会计论文
    项目管理
    性情男女
    性格测试
    少儿文学
     
    传播论坛
    法律援助
    实用文书
    市场运营
    成人笑话
    性爱测试
    星座知识
    Copyright © 2005-2008 asp.u258.net All rights reserved.
    本站资源部分来自互联网如有侵犯你的权益请与我们联系