ClipBoard函数

呵呵,好久没写点关于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;

看到了吧,这个函数返回了一个TClipboard类型的对象,在函数内部建立了这个对象。

这下就又从VCL代码里学会一招了。当然,有了创建,应该还有销毁,才是健康的代码,

destructor TClipboard.Destroy;
begin
  if (FClipboard = Self) then
    FClipboard := nil;
  inherited Destroy;
end;

initialization
  { The following strings should not be localized }
  CF_PICTURE := RegisterClipboardFormat('Delphi Picture');
  CF_COMPONENT := RegisterClipboardFormat('Delphi Component');
  FClipboard := nil;
finalization
  FClipboard.Free;
end.

其中的FClipboard是Clipbrd单元内的一个全局变量。所以使用initialization和finalization来初始化和销毁该对象。我就是随便说两句,更多详细的内容大家自己看代码吧。

posted @ 2005-09-02 22:02  monkeyking  阅读(1688)  评论(0)    收藏  举报