相关资料:
http://user.qzone.qq.com/513187410/blog/1265981516
实例原码:
1 unit Unit1; 2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, StdCtrls, ExtCtrls, 8 Clipbrd, jpeg; //Clipboard使用
9
10 type
11 TForm1 = class(TForm) 12 Image1: TImage; 13 ListBox1: TListBox; 14 Image2: TImage; 15 procedure FormCreate(Sender: TObject); 16 procedure FormClose(Sender: TObject; var Action: TCloseAction); 17 procedure ListBox1Click(Sender: TObject); 18 private
19 { Private declarations }
20 //处理WM_DRAWCLIPBOARD消息过程
21 procedure WMDrawClipBoard(var AMessage:TMessage);message WM_DRAWCLIPBOARD; 22 public
23 { Public declarations }
24 end; 25
26 var
27 Form1: TForm1; 28
29 implementation
30 {$R *.dfm}
31
32 var
33 //观察链中下一个窗口句柄
34 NextClipHwnd:HWND; 35 { TForm1 }
36
37 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 38 begin
39 //从观察链中删除本观察窗口
40 ChangeClipboardChain(Handle, NextClipHwnd); 41 //将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
42 SendMessage(NextClipHwnd, WM_CHANGECBCHAIN, Handle, NextClipHwnd); 43 end; 44
45 procedure TForm1.FormCreate(Sender: TObject); 46 begin
47 //获得观察链中下一个窗口句柄
48 NextClipHwnd := SetClipBoardViewer(Handle); 49 end; 50
51 procedure TForm1.ListBox1Click(Sender: TObject); 52 begin
53 if ListBox1.Items.Count >= 0 then
54 if ListBox1.Items.Strings[ListBox1.ItemIndex] ='Bitmap' then
55 begin
56 Clipboard.Open; 57 Clipboard.Clear; 58 Clipboard.SetAsHandle(CF_BITMAP, Image1.Picture.Bitmap.Handle); 59 Clipboard.Close; 60 end
61 else
62 begin
63 Clipboard.Open; 64 ClipBoard.Clear; 65 Clipboard.AsText := ListBox1.Items.Strings[ListBox1.ItemIndex]; 66 ClipBoard.Close; 67 end; 68 end; 69
70 procedure TForm1.WMDrawClipBoard(var AMessage: TMessage); 71 begin
72 //将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
73 if NextClipHwnd <> 0 then
74 SendMessage(NextClipHwnd, AMessage.Msg, AMessage.WParam, AMessage.LParam); 75 //处理剪贴板中内容
76 if Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT) then
77 begin
78 //查询剪贴板中特定格式的数据内容
79 ListBox1.Items.Add(Clipboard.asText + '...'); 80 end; 81 if Clipboard.HasFormat(CF_BITMAP) then
82 begin
83 ListBox1.Items.Add('Bitmap'); 84 Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP, clipboard.GetAsHandle(CF_BITMAP), 0); 85 end; 86 end; 87
88 end.