您现在的位置: 主页 > 上位机技术 > delphi > 一个处理剪贴板的简单例子
本文所属标签:
为本文创立个标签吧:

一个处理剪贴板的简单例子

来源: 网络用户发布,如有版权联系网管删除 2020-04-04 

一个处理剪贴板的简单例子 将剪贴板的文字内容显示为窗口标题。

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs,C

lipbrd;//加入clipbrd单元

type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

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

procedure WMDrawClipBoard(var AMessage:TMessage); message WM_DRAWCLIPBOARD;/

/处理WM_DRAWCLIPBOARD消息过程

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.WMDrawClipBoard(var AMessage: TMessage);

begin

//将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口

SendMessage(NextClipHwnd,AMessage.Msg,AMessage.WParam,AMessage.LParam);

//查询剪贴板中特定格式的数据内容

if (Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT)) then

begin

//处理剪贴板中内容

Caption:=Clipboard.asText;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

//获得观察链中下一个窗口句柄

NextClipHwnd:=SetClipBoardViewer(Handle);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//从观察链中删除本观察窗口

ChangeClipboardChain(Handle,NextClipHwnd);

//将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口

SendMessage(NextClipHwnd,WM_CHANGECBCHAIN,Handle,NextClipHwnd);

end;

end.

需要注意的是,在处理剪贴板内容变化的消息WM_DRAWCLIPBOARD的过程和关闭窗口事件中

使用函数sendmessage把WM_DRAWCLIPBOARD或WM_CHANGECBCHAIN消息传递到观察链中的下一

个窗口是必要的,否则有可能其他窗口不能获得类似消息。

unit clipbrdform;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs,clipbrd, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Button1: TButton;

Edit2: TEdit;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

clipBoard:Tclipboard;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

showmessage(edit1.Text);

clipboard:=Tclipboard.create;

clipboard.SetTextBuf(pchar(copy(edit1.Text,1,255)));

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

edit2.Text:=clipboard.AsText;

end;

end.

关于Delphi的东西

怎么把Memo里面的东西复制到剪贴板里,

过程很简单,Memo.SelectAll,然后Memo.CopyToClipboard就可以了。

不过接着同事又问了我一个问题,为什么Memo.SelectAll后,Memo没有任何显示呢?文字没有被选中的效果?

我跑去看了一眼,原来他把以上方法写在了一个Button.OnClick里面,我让他再加上一行Memo.SetFoucs,效果就出来了。呵呵,主要原因是在点击按钮时,Memo失去了焦点,于是在SelectAll以后,界面也没有即时刷新。

后来他又问了我一个问题,怎么可以直接得到操作剪贴板里的文本呢?

这就是用到Delphi的Clipboard函数了。

Clipboard.AsText就能得到剪贴板里的文本。

此时初学者肯定会奇怪,Clipboard不是一个函数么,怎么这种用法跟一个对象一样呢。

跟一下Clipboard的VCL源码(按住Ctrl键的同时,在Clipboard上面点击鼠标,注意,要正常使用Clipboard需要uses Clipbrd单元)

function Clipboard: TClipboard;

begin

if FClipboard = nil then

FClipboard := TClipboard.Create;

Result := FClipboard;

end;


              查看评论 回复



嵌入式交流网主页 > 上位机技术 > delphi > 一个处理剪贴板的简单例子
 

"一个处理剪贴板的简单例子"的相关文章

网站地图

围观()