下载本文示例代码
p> 可能有很多电脑使用者使用过剪贴板来监视软件,该软件可以将剪贴板的每次变化保存起来,以便使用者随时调用,下面就介绍怎样用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.
p> 可能有很多电脑使用者使用过剪贴板来监视软件,该软件可以将剪贴板的每次变化保存起来,以便使用者随时调用,下面就介绍怎样用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.
下载本文示例代码
编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视编程实现对剪贴板的监视
阅读(213) | 评论(0) | 转发(0) |