剪切板-监视剪贴板

相关资料:

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.
原文地址:https://www.cnblogs.com/FKdelphi/p/5500482.html