Delphi中剪切板的使用[1]: AsText、SetTextBuf、GetTextBuf

剪切板类 TClipboard 定义在 Clipbrd 单元, 使用前先要 uses Clipbrd;

uses Clipbrd;

procedure TForm1.Button1Click(Sender: TObject);
var
 clip: TClipboard;
begin
 clip := TClipboard.Create; {建立}
 clip.AsText := Self.Text; {把窗体标题放入剪切板}
 ShowMessage(clip.AsText); {从剪切板读取, 返回结果是: Form1}
 {因为剪切板是全局的, 此时可以在其他地方粘贴一试}
 clip.Free;         {释放}
end;

根据 Delphi 给我们提供的方便, 上面的例子可以简化为:

uses Clipbrd;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Clipboard.AsText := Text;
 ShowMessage(Clipboard.AsText); {Form1}
end;

这个 Clipboard 是什么? 是不是和 Screen 一样的类型变量?

答案是否定的! Clipboard 只是个函数, 是一个无参函数, 是定义在 Clipbrd 单元的一个全局函数, 它返回一个 TClipboard 类型的变量, 当我看到这个函数的源码时, 真是感觉又学了 一招, 非常精巧的思路.

除了用 TClipboard.AsText 属性, 我们还可以使用 SetTextBuf 把文本放入剪切板、使用 GetTextBuf 读出剪切板中的文本.

uses Clipbrd;

{使用 SetTextBuf}
procedure TForm1.Button1Click(Sender: TObject);
begin
 Clipboard.SetTextBuf(PChar(Text)); {按参数类型要求, 需要转换一下}
 ShowMessage(Clipboard.AsText);   {Form1}
end;

{使用 GetTextBuf 就和使用 API 差不多, 需要给个缓冲区}
procedure TForm1.Button2Click(Sender: TObject);
var
 arr: array[0..255] of Char;
begin
 Clipboard.AsText := Text;
 Clipboard.GetTextBuf(arr, Length(arr));
 ShowMessage(arr);            {Form1}
end;

{如果不给缓冲区, 那你自己得申请并释放内存}
procedure TForm1.Button3Click(Sender: TObject);
var
 pc: PChar;
begin
 Clipboard.AsText := Text;
 GetMem(pc, 256);        {申请内存}
 Clipboard.GetTextBuf(pc, 256);
 ShowMessage(pc);        {Form1}
 FreeMem(pc);          {释放内存}
end;

时间: 2024-08-22 14:27:47

Delphi中剪切板的使用[1]: AsText、SetTextBuf、GetTextBuf的相关文章

Delphi中剪切板的使用[3]: SetComponent、GetComponent

本例演示把一个组件(TEdit)放入剪切板, 又取出(放到一个 TPanel 上)的过程. 放入剪切板的方法是个过程: SetComponent(要放入的组件); 取出的方法是个函数: GetComponent(指定属主, 指定父窗口): 函数返回取出的组件的句柄. 取出以前, 最好要判断一下当前剪切板中是不是个组件: HasFormat(CF_COMPONENT); 取出以前还必须要注册要取出的组件类, 譬如: RegisterClasses([TEdit]); 准备工作: 在窗体上添加 TE

Delphi中剪切板的使用[5]:SetAsHandle、GetAsHandle

如果要在剪切板中存放自己的格式, 需要用到 SetAsHandle.GetAsHandle 两 个方法. SetAsHandle(用于剪切板的格式ID, 数据的内存句柄); 看这个方法的两个参 数都有点麻烦. 自定义剪切板格式要用 RegisterClipboardFormat 函数; 第二个参数是内存 句柄而不是内存地址, 能分配内存并返回句柄的函数暂时我只知道 GlobalAlloc .GlobalReAlloc 两个函数, 使用它们分配用于剪切板的内存时还须使用 GMEM_DDESHARE

Delphi中剪切板的使用[4]:如果把子控件一起复制

如果连同子控件一起复制到剪切板, 需要定义一个新类型. 譬如在一个 TPanel 中包含一个 TEdit; 在复制 TPanel 时, 若要连同 TEdit 一起复制, 需要重新从 TPanel 中继承出一个类来(譬如是 TMyPanel), 把 TEdit 包含在新的类中. 运行效果图: TMyPanel 类的单元: unit MyPanel; interface uses Classes, StdCtrls, ExtCtrls; type TMyPanel = class(TPanel) E

Delphi中剪切板的使用[2]: Assign、HasFormat

准备工作: 在窗体上放置一个 TPanel; 在 TPanel 上放一个 TImage; 另外需要三个按钮. 本例效果图: 第一版代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Butto

win7电脑中剪切板的信息无法粘贴怎么办?

  其实在win7旗舰版中,除了咱们经常使用的快捷键复制粘贴之外,还有一个功能是可以帮助咱们暂存缓存数据的,那便是剪切板了,很多时候,咱们都可以通过剪切板将需要的信息直接粘贴过来,但是最近有朋友发现了一个奇怪的现象,就是剪贴板中的信息突然无法粘贴出来了,这是怎么回事呢?下面,就和小编一起来看看解决问题的办法吧! 第一种方法:其实很多时候,因为咱们在电脑中新建了登录账户,导致电脑中的某些程序被误设置为在该用户账户情况下方可使用,而一旦咱们没有用该账户登录时,这些程序的某些功能就无法使用了,剪贴板也

win7中的剪切板无法使用了怎么办?

  咱们日常操作中经常会使用到的一个快捷键便是复制粘贴了,这个键非常的好用,特别是对于工作中的一些操作来说,更是相当的实用.那么大家在使用win7 64位旗舰版下载 iso操作的时候有没有遇到过剪切板无法使用的情况呢?不但如此,很多朋友发现一个问题,剪切板无法使用,即便是重启电脑之后,都是无法解决的,那么到底要如何才可以解决这个问题?下面几个方法,与大家一起分享一下吧! 第一种方法:这也许是兼容造成的问题,也就是说,win7旗舰版中有一些程序驱动或者是软件服务与咱们的系统存在有冲突的现象,这个时

Delphi中把窗体客户区图像保存到文件或剪切板

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedu

Windows 8开发入门(十四) windows 8中粘贴板(剪切板)的使用

在Windows 8中我们的粘贴板分别保存4种信息:文本.图片.网页.文件.在本文中我们将分别复制和粘 贴这4种元素,当然你也可以在外部复制这4种元素,然后在程序中粘贴出来. DataPackage:包含用户 希望与另一个应用程序交换的数据 //设置一个中转变量保存用户的值 DataPackage dp = new DataPackage(); 第一:我们来看看复制和粘贴文本的后台处理代码 . //<!--复制文本--> private void CopyText_Click(object s

C#操作Clipboard读取剪切板中数据实例详解

  本文实例讲述了C#操作Clipboard读取剪切板中数据的方法.分享给大家供大家参考.具体分析如下: 1 自定义一个类,并且保证它的可序列化的:实现ISerializable接口;或者用[Serializable]标记(如果有父类,则父类也需要被标记;可以[NonSerialized()]标记类中不想被序列化的字段) 2 注册自定义数据格式:调用静态方法DataFormats.GetFormat() 3 保存数据到clipboard:利用IdataObject接口,创建一个数据对象,并设置数