DELPHI基础教程:剪贴板和动态数据交换(一)[1]

如题所述

第1个回答  2022-10-29

  应用程序间的数据交换是象Windows 这样的多任务环境的重要特性 作为一种基于Windows的开发工具 Delphi支持如下四种数据交换方式 剪贴板 动态数据交换 ( DDE) 对象联接与嵌入(OLE)以及动态联接库(DLLs) 这中间前三种方式最为常用 OLE功能最为强大 DDE次之 而剪贴板使用最为方便 在本章 我们只讨论剪贴板和动态数据交换 利用OLE实现数据交换见下一章 利用动态联接库(DLLs)进行数据交换将在第十章中介绍

   剪贴板及其应用

  本质上 剪贴板只是一个全局内存块 当一个应用程序将数据传送给剪贴板后 通过修改内存块分配标志 把相关内存块的所有权从应用程序移交给Windows自身 其它应用程序可以通过一个句柄找到这个内存块 从而能够从内存块中读取数据 这样就实现了数据在不同应用程序间的传输

  剪贴板虽然功能较为简单 且不能实现实时传输 但却是更为复杂的DDE和OLE的基础 对于一些只是偶尔需要使用其它应用程序数据的程序来说 使用剪贴板不失为一种方便 快捷的方式

  Delphi把剪贴板的大部分功能封装到一个TClipboard类中 同时把使用频度最高的文本传输功能(包括DBImage的图像传输功能)置入相应部件作为部件的方法 从而使用户可以十分方便地使用剪贴板进行编程

   使用剪贴板传输文本

  剪贴板传输文本主要是应用如下的三个方法 CopyToClipboard CutToClipboard 和PasteFromClipboard 包含这些方法的部件如下表所示

  表 包含剪贴板方法的部件

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  方 法 部 件

  

  TDBEdit TDBMemo

  TDBImage

  CopyToClipboard TEdit TMemo TMaskEdit

  TOLEContainer

  TDDEServerItem

  

  TDBEdit TDBMemo

  CutToClipboard TDBImage

  TEdit TMemo TMaskEdit

  

  TDBEdit TDBMemo

  PasteFromClipboard TDBImage

  TEdit TMemo TMaskEdit

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  除TDBImage外 其余全是有关文本的控件

  在把文本传输到剪贴板之前 文本必须被选中

  若选TMaskEdit的AutoSelect属性为True 则当MaskEdit获得输入焦点时文本自动被选中 若选TEdit TMemo的HideSelection属性为True 则失去焦点时 文本选中状态自动隐藏 重新获得焦点时再显示

  下面的语句把MaskEdit中选中的文本剪切到剪贴板

  MaskEdit CutToClipboard;

  下面的语句把剪贴板中的文本粘贴到Memo的当前光标处

  Memo PasteFromClipboard;

  利用剪贴板类也可以实现文本的传输 见( )中的介绍

   剪贴板类

  为方便剪贴板的操作 Delphi在Clipbrd库单元中定义了一个TClipboard类 并且预定义了一个变量Clipboard作为类TClipboard的实例 从而使用户在绝大多数场合不必自己去定义一个TClipboard的实例

  利用剪贴板类可以进行文本 图像和部件的传输 剪贴板类为实现这些方法提供了相应的属性和方法 表 表 列出了TClipboard属性和方法的意义

  表 TClipboard的属性

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  属 性 意 义

  ───────────────────────────

  AsText 保存剪贴板的文本 只有运行时才可设置

  FormatCount 可用剪贴板格式的数目

  Formats 可用剪贴板格式链

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  表 TClipboard的方法

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  方 法 参 数 意 义

  ─────────────────────────────────────

  Clear 无 清除剪贴板的内容

  Assign Source:TPersistent 把Source参数指定的对象拷贝到剪贴板 常用于图形 图像对象

  Open 无打开剪贴板 阻止其它应用程序改变它的内容

  Close 无 关闭打开的剪贴板

  SetComponent Source:TPersistent 把部件拷贝到剪贴板

  GetComponent Owner 从剪贴板取回一个部件并放置

  Parent :TPersistent

  SetAsHandle Format:Word 把指定格式数据的句柄交给剪贴板 返回类型 THandle

  GetAsHandle Format:Word 返回剪贴板指定格式数据的句柄 返回类型 THandle

  HasFormat Format:Word 判断剪贴板是否拥有给定的格式 返回类型 Boolean

  SetTextBuf Buffer:PChar 设置剪贴板的文本内容

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  剪贴板中可能的数据格式如下表

  表 剪贴板数据格式及其意义

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  数据格式 意 义

  ──────────────────────────────

  CF_TEXT 文本 每行以CF_LF结束 nil标志文本结束

  CF_BITMAP Windows位图

  CF_METAFILE Windows元文件

  CF_PICTURE TPicture类型的对象

  CF_OBJECT 任何TPersistent类型的对象

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  利用TClipboard实现文本的传输使用AsText属性和SetTextBuf方法

  AsText属性为非控件部件的剪贴板操作提供了方便 如

  Clipboard AsText := Form Caption ;

  把Form 的标题拷贝到剪贴板

  Label Caption := Clipboard AsText;

  把剪贴板中的文本写入Label

  SetTextBuf用于把超过 个字符的字符串拷入剪贴板

   利用剪贴板传输图像

   拷贝

  Image部件上的内容和窗体上的图形可以直接拷贝到剪贴板 图像拷贝利用Clipboard的Assign方法

  例如

  Clipboard Assign(Image Picture)

  把Image 上的图像拷贝到剪贴板

lishixinzhi/Article/program/Delphi/201311/25228

相似回答