转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
编程实现对剪贴板的监视         ★★★★

编程实现对剪贴板的监视

作者:闵涛 文章来源:闵涛的学习笔记 点击数:856 更新时间:2009/4/23 18:24:17
  可能有很多电脑使用者使用过剪贴板来监视软件,该软件可以将剪贴板的每次变化保存起来,以便使用者随时调用,下面就介绍怎样用Delphi编程来实现对剪贴板进行监视的功能。

  在Windows中,有一个剪贴板观察链(Chain of Clipboard Viewers),当剪贴板的内容每次发生改变时,Windows都会向剪贴板观察链中所有的窗口发送WM_DRAWCLIPBOARD消息。通过Windows API函数SetClipboardViewer可以将窗口设置到剪贴板观察链中,然后在程序中编写WM_DRAWCLIPBOARD消息处理函数就可以基本实现对剪贴板的监视功能了,在退出程序时,要调用ChangeClipboardChain函数,以便将窗口从剪贴板监视链中删除。

  Delphi中提供了一个TClipboard控件,可以实现一些需要进行复杂的Windows API编程才能实现的功能。而且,Delphi中的文本和图形控件提供了比VB中的类似控件更强大的剪贴板操作功能。同时,Delphi中虽然没有提供WM_DRAWCLIPBOARD事件,但是,Delphi提供了一个像C++一样让编程人员可以自由地编写用户自定义函数的功能,这样,编程人员就可以编写自定义函数来处理Delphi中没有提供的消息了,从而可以方便地监视剪贴板的每一次变化了。

  具体实现对剪贴板的监视功能的源代码见右边程序,首先要在Form1中加入一个TMemo控件和一个TImage控件,不需要改变它们的属性。

  该程序在Win 95、Delphi 4.0下运行通过。
  unit Unit1;
  interface

  uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  ExtCtrls,Clipbrd, StdCtrls;

  type

   TForm1 = class(TForm)
   Image1: TImage;
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   private
   procedure WMDrawClip(var Message:TMessage);message WM_DRAWCLIPBOARD;
   { Private declarations }
   public
   { Public declarations }
   end;

  var
   Form1: TForm1;
   //保存下一个接受剪贴板消息的窗口的句柄
   hwndNextClip:integer;

  implementation
  {$R *.DFM}
  procedure TForm1.WMDrawClip(var Message:TM age);
  begin
   //将剪贴板消息发送到观察链上的下一个窗口
   SendMessage(hwndNextClip,Message.Msg,Message.WParam ,Message.LParam );

  if(Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT)) then
   //剪贴板上的内容是文本格式
  begin
   //设置Memo1接收文本
   Memo1.Align:= alClient;
   Memo1.Visible :=True;
   Image1.Visible := False;

   //将剪贴板的内容粘贴到文本框中
   Memo1.PasteFromClipboard;
   end;

   if Clipboard.HasFormat(CF_BITMAP) then
   //剪贴板上的内容是位图格式
   begin
   //设置Image1接收位图
   Image1.Align:= alClient;
   Memo1.Visible :=False;
   Image1.Visible := True;

   //将剪贴板内容粘贴到图片框中
   Image1.Picture.LoadFromClipboardFormat
(CF_BITMAP,ClipBoard.GetAsHandle(CF_BITMAP),0);
   end;
  end;

  procedure TForm1.FormCreate(Sender: TObject);
  begin
   //把窗口设置到剪贴板查看链上
   hwndNextClip:=SetClipboardViewer(Form1.Handle);
  end;

  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  begin
   //将窗口从剪贴板观察链中删除
   ChangeClipboardChain(Form1.Handle,hwndNextClip);
   SendMessage(hwndNextClip,WM_CHANGECBCHAIN,Form1.Handle ,hwndNextClip);
  end;

  end.


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台