delphi剪切板-监视剪贴板


本文整理自网络,侵删。

 
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,
  Clipbrd, jpeg; //Clipboard使用

type
  TForm1 = class(TForm)
    Image1: TImage;
    ListBox1: TListBox;
    Image2: TImage;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
    //处理WM_DRAWCLIPBOARD消息过程
    procedure WMDrawClipBoard(var AMessage:TMessage);message WM_DRAWCLIPBOARD;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

var
  //观察链中下一个窗口句柄
  NextClipHwnd:HWND;
{ TForm1 }

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //从观察链中删除本观察窗口
  ChangeClipboardChain(Handle, NextClipHwnd);
  //将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
  SendMessage(NextClipHwnd, WM_CHANGECBCHAIN, Handle, NextClipHwnd);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //获得观察链中下一个窗口句柄
  NextClipHwnd := SetClipBoardViewer(Handle);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  if ListBox1.Items.Count >= 0 then          
    if ListBox1.Items.Strings[ListBox1.ItemIndex]  ='Bitmap'  then
      begin
        Clipboard.Open;
        Clipboard.Clear;
        Clipboard.SetAsHandle(CF_BITMAP, Image1.Picture.Bitmap.Handle);
        Clipboard.Close;
      end
    else
    begin
      Clipboard.Open;
      ClipBoard.Clear;
      Clipboard.AsText := ListBox1.Items.Strings[ListBox1.ItemIndex];
      ClipBoard.Close;
    end;
end;

procedure TForm1.WMDrawClipBoard(var AMessage: TMessage);
begin
  //将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
  if NextClipHwnd <> 0 then
    SendMessage(NextClipHwnd, AMessage.Msg, AMessage.WParam, AMessage.LParam);
  //处理剪贴板中内容
  if Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT) then
  begin
    //查询剪贴板中特定格式的数据内容
    ListBox1.Items.Add(Clipboard.asText + '...');
  end;
  if Clipboard.HasFormat(CF_BITMAP) then
  begin
    ListBox1.Items.Add('Bitmap');
    Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP, clipboard.GetAsHandle(CF_BITMAP), 0);
  end;
end;

end.

相关阅读 >>

Delphi 重启启动计算机的代码

Delphi读写ini文件加锁(独占)

Delphi字符串隐藏

Delphi 解决webbrowser不能复制的问题

Delphi获取dll的函数列表

Delphi 线程中修改主窗体的控件内容

Delphi datetimetogmt gmt时间与tdatetime转换

Delphi版多开源码,也就是遍历系统内核对象句柄

incsecond:将一个tdatetime变量加减一定数量的秒数

Delphi 如何在桌面添加右键菜单

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...