?? 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 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%" bgcolor="#e0e0e0"><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" bgcolor="#F5F8F8" 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 + -