📄 019.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基础教程-->第七章 剪贴板和动态数据交换(一)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基础教程 第七章 剪贴板和动态数据交换(一)">
<META NAME="description" CONTENT=" - DELPHI基础教程 - 第七章 剪贴板和动态数据交换(一)">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 background="bg.gif" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%" background="bg.gif"><strong><A HREF="020.htm" ><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR>
<A HREF="018.htm" ><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR>
<A HREF="index.html" ><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR>
<A HREF="../../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首页</font></A><BR>
</strong>
</TD>
<TD class="tt2" background="bg.gif" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">第七章 剪贴板和动态数据交换(一)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p><font face="宋体" lang="ZH-CN">
应用程序间的数据交换是象</font>Windows
<font face="宋体" lang="ZH-CN">这样的多任务环境的重要特性。作为一种基于</font>Windows<font
face="宋体" lang="ZH-CN">的开发工具,</font>Delphi<font face="宋体" lang="ZH-CN">支持如下四种数据交换方式:剪贴板、动态数据交换</font>
( DDE)<font face="宋体" lang="ZH-CN">、对象联接与嵌入</font>(OLE)<font
face="宋体" lang="ZH-CN">以及动态联接库</font>(DLLs)<font face="宋体"
lang="ZH-CN">。这中间前三种方式最为常用,</font>OLE<font face="宋体"
lang="ZH-CN">功能最为强大,</font>DDE<font face="宋体" lang="ZH-CN">次之。而剪贴板使用最为方便。在本章,我们只讨论剪贴板和动态数据交换。利用</font>OLE<font
face="宋体" lang="ZH-CN">实现数据交换见下一章,利用动态联接库</font>(DLLs)<font
face="宋体" lang="ZH-CN">进行数据交换将在第十章中介绍。 </p>
</font><p align="center">7.1 <font face="宋体" lang="ZH-CN">剪贴板及其应用 </p>
</font><p><font face="宋体" lang="ZH-CN">
本质上,剪贴板只是一个全局内存块。当一个应用程序将数据传送给剪贴板后,通过修改内存块分配标志,把相关内存块的所有权从应用程序移交给</font>Windows<font
face="宋体" lang="ZH-CN">自身。其它应用程序可以通过一个句柄找到这个内存块,从而能够从内存块中读取数据。这样就实现了数据在不同应用程序间的传输。 </p>
</font><p><font face="宋体" lang="ZH-CN">
剪贴板虽然功能较为简单,且不能实现实时传输,但却是更为复杂的</font>DDE<font
face="宋体" lang="ZH-CN">和</font>OLE<font face="宋体" lang="ZH-CN">的基础。对于一些只是偶尔需要使用其它应用程序数据的程序来说,使用剪贴板不失为一种方便、快捷的方式。</p>
</font><p> Delphi<font face="宋体"
lang="ZH-CN">把剪贴板的大部分功能封装到一个</font>TClipboard<font
face="宋体" lang="ZH-CN">类中,同时把使用频度最高的文本传输功能</font>(<font
face="宋体" lang="ZH-CN">包括</font>DBImage<font face="宋体" lang="ZH-CN">的图像传输功能</font>)<font
face="宋体" lang="ZH-CN">置入相应部件作为部件的方法,从而使用户可以十分方便地使用剪贴板进行编程。 </p>
</font><p>7.1.1 <font face="宋体" lang="ZH-CN">使用剪贴板传输文本 </p>
<p>剪贴板传输文本主要是应用如下的三个方法</font>:CopyToClipboard<font
face="宋体" lang="ZH-CN">、</font>CutToClipboard <font face="宋体" lang="ZH-CN">和</font>PasteFromClipboard<font
face="宋体" lang="ZH-CN">。包含这些方法的部件如下表所示。 </p>
<p> 表</font>7.1 <font face="宋体" lang="ZH-CN">包含剪贴板方法的部件</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>方 法 部 件</p>
<p>———————————————————————————</p>
</font><p>TDBEdit<font face="宋体" lang="ZH-CN"> </font>TDBMemo</p>
<p>TDBImage</p>
<p>CopyToClipboard TEdit TMemo TMaskEdit</p>
<p>TOLEContainer</p>
<p>TDDEServerItem</p>
<p><font face="宋体" lang="ZH-CN">———————————————————————————</p>
</font><p>TDBEdit TDBMemo</p>
<p>CutToClipboard TDBImage</p>
<p>TEdit TMemo TMaskEdit</p>
<p><font face="宋体" lang="ZH-CN">———————————————————————————</p>
</font><p>TDBEdit TDBMemo</p>
<p>PasteFromClipboard TDBImage</p>
<p>TEdit TMemo TMaskEdit </p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
</font><p><font face="宋体" lang="ZH-CN">
除</font>TDBImage<font
face="宋体" lang="ZH-CN">外,其余全是有关文本的控件。</p>
</font><p><font face="宋体" lang="ZH-CN">
在把文本传输到剪贴板之前,文本必须被选中。</p>
</font><p><font face="宋体" lang="ZH-CN">
若选</font>TMaskEdit<font
face="宋体" lang="ZH-CN">的</font>AutoSelect<font face="宋体" lang="ZH-CN">属性为</font>True<font
face="宋体" lang="ZH-CN">,则当</font>MaskEdit<font face="宋体" lang="ZH-CN">获得输入焦点时文本自动被选中;若选</font>TEdit<font
face="宋体" lang="ZH-CN">、</font>TMemo<font face="宋体" lang="ZH-CN">的</font>HideSelection<font
face="宋体" lang="ZH-CN">属性为</font>True<font face="宋体" lang="ZH-CN">,则失去焦点时,文本选中状态自动隐藏,重新获得焦点时再显示。</p>
<p>下面的语句把</font>MaskEdit<font face="宋体" lang="ZH-CN">中选中的文本剪切到剪贴板: </p>
</font><p>MaskEdit .CutToClipboard; </p>
<p><font face="宋体" lang="ZH-CN">下面的语句把剪贴板中的文本粘贴到</font>Memo<font
face="宋体" lang="ZH-CN">的当前光标处: </p>
</font><p>Memo.PasteFromClipboard<font face="宋体" lang="ZH-CN">; </p>
<p>利用剪贴板类也可以实现文本的传输,见</font>(7.1.2)<font face="宋体"
lang="ZH-CN">中的介绍。 </p>
</font><p>7.1.2 <font face="宋体" lang="ZH-CN">剪贴板类 </p>
</font><p><font face="宋体" lang="ZH-CN">
为方便剪贴板的操作,</font>Delphi<font
face="宋体" lang="ZH-CN">在</font>Clipbrd<font face="宋体" lang="ZH-CN">库单元中定义了一个</font>TClipboard<font
face="宋体" lang="ZH-CN">类,并且预定义了一个变量</font>Clipboard<font
face="宋体" lang="ZH-CN">作为类</font>TClipboard<font face="宋体" lang="ZH-CN">的实例,从而使用户在绝大多数场合不必自己去定义一个</font>TClipboard<font
face="宋体" lang="ZH-CN">的实例。</p>
</font><p><font face="宋体" lang="ZH-CN">
利用剪贴板类可以进行文本、图像和部件的传输,剪贴板类为实现这些方法提供了相应的属性和方法。表</font>7.2<font
face="宋体" lang="ZH-CN">、表</font>7.3<font face="宋体" lang="ZH-CN">列出了</font>TClipboard<font
face="宋体" lang="ZH-CN">属性和方法的意义。 </p>
</font><p><font face="宋体" lang="ZH-CN">表</font> 7.2 TClipboard<font face="宋体"
lang="ZH-CN">的属性</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>属 性 意 义</font></p>
<p><font face="宋体" lang="ZH-CN">───────────────────────────</p>
</font><p>AsText <font face="宋体" lang="ZH-CN">保存剪贴板的文本,只有运行时才可设置</p>
</font><p>FormatCount <font face="宋体" lang="ZH-CN">可用剪贴板格式的数目</p>
</font><p>Formats <font face="宋体" lang="ZH-CN">可用剪贴板格式链</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p> 表</font> 7.3 TClipboard<font face="宋体" lang="ZH-CN">的方法</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>方 法 参 数 意 义</font></p>
<p><font face="宋体" lang="ZH-CN">─────────────────────────────────────</p>
</font><p>Clear <font face="宋体" lang="ZH-CN">无 清除剪贴板的内容</p>
</font><p>Assign Source:TPersistent <font face="宋体" lang="ZH-CN">把</font>Source<font
face="宋体" lang="ZH-CN">参数指定的对象拷贝到剪贴板,常</font></p>
<p><font face="宋体" lang="ZH-CN">用于图形、图像对象</p>
</font><p>Open <font face="宋体" lang="ZH-CN">无
打开剪贴板,阻止其它应用程序改变它的内容</p>
</font><p>Close <font face="宋体" lang="ZH-CN">无 关闭打开的剪贴板</p>
</font><p>SetComponent Source:TPersistent <font face="宋体" lang="ZH-CN">把部件拷贝到剪贴板</p>
</font><p>GetComponent Owner <font face="宋体" lang="ZH-CN">从剪贴板取回一个部件并放置</p>
</font><p>Parent :TPersistent</p>
<p>SetAsHandle Format:Word <font face="宋体" lang="ZH-CN">把指定格式数据的句柄交给剪贴板</p>
<p>返回类型:</font>THandle</p>
<p>GetAsHandle Format:Word <font face="宋体" lang="ZH-CN">返回剪贴板指定格式数据的句柄</p>
<p>返回类型:</font>THandle</p>
<p>HasFormat Format:Word <font face="宋体" lang="ZH-CN">判断剪贴板是否拥有给定的格式</p>
<p>返回类型:</font>Boolean</p>
<p>SetTextBuf Buffer:PChar <font face="宋体" lang="ZH-CN">设置剪贴板的文本内容</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p> 剪贴板中可能的数据格式如下表。 </p>
<p>表</font> 7.4<font face="宋体" lang="ZH-CN"> 剪贴板数据格式及其意义</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>数据格式 意 义</font></p>
<p><font face="宋体" lang="ZH-CN">──────────────────────────────</p>
</font><p>CF_TEXT <font face="宋体" lang="ZH-CN">文本。每行以</font>CF_LF<font
face="宋体" lang="ZH-CN">结束,</font>nil<font face="宋体" lang="ZH-CN">标志文本结束</p>
</font><p>CF_BITMAP Windows<font face="宋体" lang="ZH-CN">位图</p>
</font><p>CF_METAFILE Windows<font face="宋体" lang="ZH-CN">元文件 </p>
</font><p>CF_PICTURE TPicture<font face="宋体" lang="ZH-CN">类型的对象</p>
</font><p>CF_OBJECT <font face="宋体" lang="ZH-CN">任何</font>TPersistent<font
face="宋体" lang="ZH-CN">类型的对象</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p>利用</font>TClipboard<font face="宋体" lang="ZH-CN">实现文本的传输使用</font>AsText<font
face="宋体" lang="ZH-CN">属性和</font>SetTextBuf<font face="宋体" lang="ZH-CN">方法。</p>
</font><p>AsText<font face="宋体" lang="ZH-CN">属性为非控件部件的剪贴板操作提供了方便。如: </p>
</font><p>Clipboard. AsText := Form1.Caption ; </p>
<p><font face="宋体" lang="ZH-CN">把</font>Form1<font face="宋体" lang="ZH-CN">的标题拷贝到剪贴板。 </p>
</font><p>Label1.Caption := Clipboard.AsText; </p>
<p><font face="宋体" lang="ZH-CN">把剪贴板中的文本写入</font>Label1<font
face="宋体" lang="ZH-CN">。</p>
</font><p>SetTextBuf<font face="宋体" lang="ZH-CN">用于把超过</font>255<font
face="宋体" lang="ZH-CN">个字符的字符串拷入剪贴板。 </p>
</font><p>7.1.3 <font face="宋体" lang="ZH-CN">利用剪贴板传输图像 </p>
</font><p>7.1.3.1 <font face="宋体" lang="ZH-CN">拷贝 </p>
</font><p>Image<font face="宋体" lang="ZH-CN">部件上的内容和窗体上的图形可以直接拷贝到剪贴板。图像拷贝利用</font>Clipboard<font
face="宋体" lang="ZH-CN">的</font>Assign<font face="宋体" lang="ZH-CN">方法。</p>
<p>例如: </p>
</font><p>Clipboard.Assign(Image1.Picture); </p>
<p><font face="宋体" lang="ZH-CN">把</font>Image1<font face="宋体" lang="ZH-CN">上的图像拷贝到剪贴板。 </p>
</font><p>7.1.3.2 <font face="宋体" lang="ZH-CN">剪切 </p>
<p>图像的剪切是首先把图像拷贝到剪贴板,而后在原位置用空白图像进行覆盖。</p>
<p>下面一段程序表示了图像的剪切。 </p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -