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 firedac tfddatamove 导出csv

Delphi 从twebbrowser webbrowser得到全部html源码

Delphi fmx 切换窗体最大化

Delphi timage 加上滚动条方法

Delphi filestream

Delphi 10.4 freeandnil 问题

Delphi indy防止假死

Delphi 字符串保存为 txt文件

Delphi 使用并行库中的ttask

Delphi 注释方法

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



打赏

取消

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

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

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

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

评论

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