一个处理剪贴板的简单例子
一个处理剪贴板的简单例子 将剪贴板的文字内容显示为窗口标题。
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___
- 要处理的文件总行数 ___delphi___
- function TrimString(str:string):string; ___delphi_
- 把要处理的文件装入到memo1_test中,启动处理定时器ti
- 读入的内容写到Memo1_Test显示出来,测试用 ___delphi_
- textarea不能使用以下方式 ___delphi___
- 随机发布文章到栏目类别 ___delphi___
- 用pos函数来判断,在下面这一行怎么会出错呢? ___del
- delphi什么函数能判断一个字符串包含在另一字符串 ___
- delphi怎样判断字符串包含指定字符 ___delphi___