2024年3月9日发(作者:)

下载

第1 7章用剪贴板共享信息

本章内容:

• 剪贴板基础

• 创建你自己的剪贴板格式

以前,人类只为生存而奋斗。人们住在黑暗的山洞里,用长矛和石块打猎谋生,以喊叫和手势进

行交流。他们崇拜火,因为火给他们带来光明。随着时代的发展,人们现在使用计算机进行交流。起

初,由于受到硬件和软件的限制,计算机在同一时刻只能运行一个应用程序。因此,要想共享信息只

有一个办法,就是把信息保存到硬盘上,然后再复制到其他机器上。

今天,硬件和软件都有了改进。在Windows 95/98和Windows NT/2000等操作系统下都能够同时运

行多个应用程序,使得计算机用户的生活更加轻松、更有创造性。Wi ndows带来的一个好处是,在同

一台计算机中运行的应用程序之间可以共享信息。Wi n32剪贴板和动态数据交换( DDE)是早期的两个共

享信息技术。对于用户来说,使用任一方法都可以方便地把信息从一个应用程序复制到另一个应用程

序。

本章向你介绍如何使用D elphi环境下的Wi n32剪贴板。本书的前一版介绍过D DE,但是,有了功

能强大的信息交换技术如C OM后,我们不想再使用以前的笨方法。在稍后的第2 3章“C OM和A ctiveX”

中,我们将深入讨论C OM。但是要在应用程序间进行简单的信息共享,剪贴板仍不失为一个实用的解

决办法。

17.1 剪贴板基础

如果你是一个有经验的Wi ndows程序员,对Wi n32剪贴板应该很熟悉

至少在功能上。如果你是

一个Wi ndows编程新手,但用过Wi ndows,那么可能使用过剪贴板,但是并不知道它是怎样实现的。

几乎所有带编辑( Edit)菜单的应用程序都能使用剪贴板。究竟什么是剪贴板呢?简单来说,剪贴板

就是一块内存区域和一套Win32 API函数,通过这些函数,应用程序可在这块内存区域上保存和获取

信息。例如,你可以从D elphi编辑器中复制部分源代码并粘贴到Wi ndows记事本或其他编辑器内。

为什么Wi n32需要一套特殊的函数和消息来操纵剪贴板呢?因为,向剪贴板复制数据,并不只是

分配一块内存区域并将数据放到该区域中,还需要让其他应用程序知道数据如何读取、数据格式是否

是它支持的。Wi n32负责内存管理,你只管执行复制、粘贴和查询等操作就可以了。

剪贴板格式

Wi n32支持2 5种预定义格式,应用程序可从剪贴板复制和粘贴这些格式的数据。下面是常

用的几种格式:

CF_BITMAP位图数据。

CF_DIB带调色板的位图数据。

CF_PALETTE调色板。

CF_TEXT字符数组,每行结尾有回车/换行标志。这是最常用的格式。

如果你还想知道其他不常用的格式,可以参考Win32 API在线帮助的“S etClipboardData”

部分。此外,Win32允许你定义你自己的私有剪贴板格式,如本章稍后演示的。

5 4 0

第二部分高级技术

下载

在D elphi之前,不得不直接调用各种剪贴板函数,还需要保证应用程序不受剪贴板内容的错误影

响。有了D elphi,只需要使用一个叫C lipboard的全局变量即可。C lipboard是一个封装Wi n32剪贴板的

D elphi类。

17.1.1 剪贴板对文本操作

第1 6章“M DI应用程序”中,我们已经介绍了如何使用剪贴板来操作文本,特别是必须在M DI应

用程序中处理文本编辑器。为此,我们创建菜单项目以执行文本的剪切、复制、粘贴、删除和选择等

操作。

在M DI应用程序中,编辑器

T Memo组件覆盖了窗口的客户区。T Memo组件本身有函数与全局

C lipboard对象交互。这些函数是C utTo ClipBoard(),C opyTo ClipBoard()和P asteFromClipBoard()。

C learSelection()和S electAll()不是必须用到的剪贴板函数,但它们使你能够选择文本以拷贝到剪贴板。

清单1 7-1列出了处理编辑菜单项目的事件处理过程。

清单17-1 剪贴板对文本操作

正如清单1 7-1所示的,只要调用T Memo方法就能执行剪贴板函数。还能通过C xt属性

手工把文本放到剪贴板中。在以前的1 6位环境下,A sTe xt属性被限制在2 55个字符之内,要想把更长的

字符串复制到剪贴板中,就不得不调用函数S etTe xtBuf()和G etTe xtBuf()。在3 2位D elphi中,这个情况

是不存在的,因为A sTe xt属性现在是长字符串类型。你会注意到S etTe xtBuf()和G etTe xtBuf()仍然保留

着。

注意剪贴板函数GetTextBuf()和SetTextBuf()使用Pascal PChar类型的缓冲区来传递和接收剪贴

板的数据。在使用这些函数时,要转换长字符串为Pchar。

17.1.2 剪贴板对位图操作

剪贴板也能够复制和粘贴图像。你可以在相同的M DI例子程序中看到它的实现。清单1 7-2列出了

执行剪贴板操作的事件处理过程。

清单17-2 剪贴板对位图操作