?? 021.htm
字號:
face="宋體" lang="ZH-CN">;</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">在</font>OLE<font face="宋體"
lang="ZH-CN">服務器資源文件與</font>OLE<font face="宋體" lang="ZH-CN">應用程序之間建立聯連,以實現對象聯連,須選擇</font>:
"Paste Line<font face="宋體" lang="ZH-CN">;</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">要將聞連與嵌入的對象顯示成圖標,選擇</font>"Display
As Icon"<font face="宋體" lang="ZH-CN">。若這個檢查框被選中,改變圖標</font>("Chang
Icon")<font face="宋體" lang="ZH-CN">按鈕將顯示通過這個按鈕可改變</font>OLE<font
face="宋體" lang="ZH-CN">對象的缺省圖標或標簽。</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">如果數據不是注冊的格式,</font>"Paste","Paste
link"<font face="宋體" lang="ZH-CN">選擇鍵將變灰。</font> <font
face="宋體" lang="ZH-CN">用戶無法從剪貼板上粘貼數據。在本章例程中,剪貼板上的數據只能是</font>FEmbedClipFmt(<font
face="宋體" lang="ZH-CN">嵌入對象</font>) <font face="宋體" lang="ZH-CN">和</font>FlinkClipFmt(<font
face="宋體" lang="ZH-CN">鏈接對象</font>)<font face="宋體" lang="ZH-CN">。</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">用戶在列表框中選擇數據類型。有時數據被解釋成多種類型。例如在包含</font>OLE<font
face="宋體" lang="ZH-CN">服務器功能的字處理器中把文本復制到剪貼板中。應用程序可以以文本和</font>OLE<font
face="宋體" lang="ZH-CN">對象兩種方式粘貼對象。列表框中出現的選擇項由</font>OLE<font
face="宋體" lang="ZH-CN">服務器決定。</p>
<p> 用戶在粘貼對話框中選擇</font>OK<font face="宋體" lang="ZH-CN">按鈕,</font>PasteSpecialDlg<font
face="宋體" lang="ZH-CN">返回真值,關于</font>OLE <font face="宋體"
lang="ZH-CN">應用程序的初始化信息貯存在</font>PInitInfo<font face="宋體"
lang="ZH-CN">所指向的結構中。 </p>
</font><p>8.3.4.2 <font face="宋體" lang="ZH-CN">在剪貼板中使用</font>OLE<font
face="宋體" lang="ZH-CN">對象 </p>
<p> 要把</font>OLE<font face="宋體" lang="ZH-CN">對象粘貼到</font>OLE<font
face="宋體" lang="ZH-CN">應用程序中,必須用</font>Windows<font face="宋體"
lang="ZH-CN">的</font> RegisterClipboardFormat<font face="宋體" lang="ZH-CN">函數為鏈連對象、嵌入對象注冊兩種新的剪貼板格式。這些格式將在</font>BOLEFormat<font
face="宋體" lang="ZH-CN">記錄的</font>fmtIdt<font face="宋體" lang="ZH-CN">域中被用到。</p>
<p> 本章例程中,</font> <font face="宋體" lang="ZH-CN">程序在</font>OnCreate<font
face="宋體" lang="ZH-CN">事件中注冊</font>OLE<font face="宋體" lang="ZH-CN">對象的剪貼板格式,以下代碼是主窗體的</font>OnCreate<font
face="宋體" lang="ZH-CN">事件: </p>
<p> </font> procedure TOLEFrameForm.FormCreate(Sender: TObject);</p>
<p>begin</p>
<p>FEmbedClipFmt := RegisterClipboardFormat('Embedded Object');</p>
<p>FLinkClipFmt := RegisterClipboardFormat('Link Source');</p>
<p>Fmts[0].fmtId := FEmbedClipFmt;</p>
<p>Fmts[0].fmtMedium := BOLEMediumCalc(FEmbedClipFmt);</p>
<p>Fmts[0].fmtIsLinkable := False;</p>
<p>StrPCopy(Fmts[0].fmtName, '%s');</p>
<p>StrPCopy(Fmts[0].fmtResultName, '%s');</p>
<p>Fmts[1].fmtId := FLinkClipFmt;</p>
<p>Fmts[1].fmtMedium := BOLEMediumCalc(FLinkClipFmt);</p>
<p>Fmts[1].fmtIsLinkable := True;</p>
<p>StrPCopy(Fmts[1].fmtName, '%s');</p>
<p>StrPCopy(Fmts[1].fmtResultName, '%s');</p>
<p>RegisterFormAsOleDropTarget(Self, Fmts)</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">
程序傳給</font>RegistClipBroardFormat<font
face="宋體" lang="ZH-CN">函數一個描述格式的參數,它返回一個</font>Word<font
face="宋體" lang="ZH-CN">類型的值。該值能唯一的辨識新注冊的格式。</font>FEmbdeClipFmt,FlinkClipFmt
<font face="宋體" lang="ZH-CN">是</font>TOLEFormat<font face="宋體" lang="ZH-CN">類的私有數據成員。</font>
<font face="宋體" lang="ZH-CN">聲明如下:</p>
<p> </font>TYPE</p>
<p>TOLEForaneForm = Class(TForm)</p>
<p><font face="宋體" lang="ZH-CN">…</font> </p>
<p>private</p>
<p>FEmbedClipFmt: Word;</p>
<p>FLinkClipFmt: Word;</p>
<p>function CreateChild: TOLEObjectForm;</p>
<p>public</p>
<p>Fmts: array[0..1] of BOleFormat;</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">
在注冊剪貼板格式后,</font> <font
face="宋體" lang="ZH-CN">還必須定義</font>OLE <font face="宋體" lang="ZH-CN">格式才能進行對象粘貼。</font>
<font face="宋體" lang="ZH-CN">每種格式定義在</font>BOLEFormat<font face="宋體"
lang="ZH-CN">記錄中。</font> <font face="宋體" lang="ZH-CN">程序中可能注冊標準剪貼板格式并用這種格式進行粘貼。例如:注冊文本作為粘貼格式,將</font>BOLEFormat<font
face="宋體" lang="ZH-CN">記錄為</font>fmtId<font face="宋體" lang="ZH-CN">域定義為</font>CF_TEXT<font
face="宋體" lang="ZH-CN">,</font>fmt Medium <font face="宋體" lang="ZH-CN">域定義為</font>BOLE_MED_HGLOBOL<font
face="宋體" lang="ZH-CN">。</font> BOLEMediumCalc <font face="宋體" lang="ZH-CN">函數可以根據定義的剪貼板格式計算出</font>fmtMedium<font
face="宋體" lang="ZH-CN">值。在本章例程中,程序注冊了兩種格式,一種是鏈接</font>OLE<font
face="宋體" lang="ZH-CN">對象的格式,另一種是嵌入</font>OLE<font
face="宋體" lang="ZH-CN">對象的格式。</p>
<p> </font>BOLEFormat<font face="宋體" lang="ZH-CN">類型定義在</font>BOLEDefs<font
face="宋體" lang="ZH-CN">單元中,</font>BOLEMediumCalc<font face="宋體"
lang="ZH-CN">函數定義在</font>ToCtrl<font face="宋體" lang="ZH-CN">單元。因此主窗中的</font>interface<font
face="宋體" lang="ZH-CN">部分應加入這兩個單元。 </p>
<p> </font>interface </p>
<p>use<font face="宋體" lang="ZH-CN">…</font>,BOLEDefs,ToCtrl,</p>
<font face="宋體" lang="ZH-CN"><p> 在粘貼</font>OLE<font face="宋體"
lang="ZH-CN">對象前,應用程序必須知道在剪貼板中是否有</font>OLE<font
face="宋體" lang="ZH-CN">對象。</p>
<p> </font>PasteSpecialEnabled<font face="宋體" lang="ZH-CN">函數可判斷粘貼對話框是否有效。如果剪貼板上有</font>Fmts<font
face="宋體" lang="ZH-CN">定義的任何一種格式,</font>PasteSpecialEnable<font
face="宋體" lang="ZH-CN">將返回真值,</font> <font face="宋體" lang="ZH-CN">粘貼對話框才能成功地調用。反之調用粘貼對話框將不發生任何事件。</p>
<p> 以下代碼實現“編輯</font>|<font face="宋體" lang="ZH-CN">粘貼”菜單項的功能: </p>
</font><p>procedure TOLEObjectForm.PasteSpecial1Click(Sender: TObject);</p>
<p>var</p>
<p>ClipFmt: Word;</p>
<p>DataHand: THandle;</p>
<p>Info: Pointer;</p>
<p>begin</p>
<p>if PasteSpecialEnabled(Self, OLEFrameForm.Fmts) then</p>
<p>if PasteSpecialDlg(Self, OLEFrameForm.Fmts, 0,</p>
<p>ClipFmt, DataHand, Info) then</p>
<p>InitializeOLEObject(Info)</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">只有在粘貼對話框有效時“編輯</font>|<font
face="宋體" lang="ZH-CN">粘貼”菜單才有效,以下代碼實現此功能: </p>
<p> </font>procedure TOLEObjectForm.Edit1Click(Sender: TObject);</p>
<p>begin</p>
<p>PasteSpecial1.Enabled := PasteSpecialEnabled(Self, OLEFrameForm.Fmts)</p>
<p>end; </p>
<p>8.3.5 <font face="宋體" lang="ZH-CN">釋放</font>OLE<font face="宋體" lang="ZH-CN">對象 </p>
<p> 從</font>OLE<font face="宋體" lang="ZH-CN">服務器拖動</font>OLE<font
face="宋體" lang="ZH-CN">對象并將其放在</font>OLE<font face="宋體" lang="ZH-CN">應用程序是一種方便的對象鏈接與嵌入的方法。通過拖放操作,用戶不需要使用插入對話框或粘貼對話框來定義</font>OLE<font
face="宋體" lang="ZH-CN">對象。而只需用鼠標鍵從</font>OLE<font face="宋體"
lang="ZH-CN">服務器中“抓”住</font>OLE<font face="宋體" lang="ZH-CN">對象,拖至</font>OLE<font
face="宋體" lang="ZH-CN">應用程序,松開鼠標鍵,從而實現</font>OLE<font
face="宋體" lang="ZH-CN">對象的插入。 </p>
</font><p>8.3.5.1 <font face="宋體" lang="ZH-CN">注冊</font>OLE<font face="宋體"
lang="ZH-CN">釋放目標窗體 </p>
<p> 為了接收一個釋放的</font>OLE<font face="宋體" lang="ZH-CN">對象,必須有一個窗體在</font>Windows<font
face="宋體" lang="ZH-CN">中注冊成</font>OLE<font face="宋體" lang="ZH-CN">釋放目標,用</font>RegisterFormASOLEDropTarget<font
face="宋體" lang="ZH-CN">函數可實現此功能。 </p>
<p> </font>RegisterFormASOLEDropTarger(Form : TFrom;Const Fmts: array of BOlefrom).</p>
<font face="宋體" lang="ZH-CN"><p> 其中</font>Form<font face="宋體"
lang="ZH-CN">是</font>OLE<font face="宋體" lang="ZH-CN">對象的釋放目標窗體,在本章例程中,將子窗體傳遞給</font>Form<font
face="宋體" lang="ZH-CN">參數。</p>
<p> </font>Fmts<font face="宋體" lang="ZH-CN">是對象格式的數組。它是</font>BOLEFormat
<font face="宋體" lang="ZH-CN">類型的數組。</font> <font face="宋體"
lang="ZH-CN">所有要釋放的數據必須用</font>Fmts<font face="宋體" lang="ZH-CN">數組中相應</font>BOLEFormat<font
face="宋體" lang="ZH-CN">元素注冊。</p>
<p> 在本章例程中,注冊的</font>Fmts <font face="宋體" lang="ZH-CN">數組與主窗體</font>OnCreate<font
face="宋體" lang="ZH-CN">事件</font> <font face="宋體" lang="ZH-CN">聲明的數組相同,</font>
<font face="宋體" lang="ZH-CN">即:聯接對象格式和嵌入對象格式。如果想接收更多類型的釋放數據,就必須在</font>Fmts<font
face="宋體" lang="ZH-CN">數組中加入其它元素。例如應用程序要接收釋放的文本,</font>Fmts<font
face="宋體" lang="ZH-CN">需加第三個元素,</font> <font face="宋體"
lang="ZH-CN">其</font>fmtId <font face="宋體" lang="ZH-CN">域為</font>CF_TEXT,BOLEMedium<font
face="宋體" lang="ZH-CN">域為</font>BOLE_MED_HGLOBL.</p>
<p><font face="宋體" lang="ZH-CN">拖放過程中不需要用</font>BOLEFormat<font
face="宋體" lang="ZH-CN">的</font>fmtName,fmtResultName<font face="宋體" lang="ZH-CN">域,如果程序只進行拖放操作而不進行對象粘貼,可以不初始化兩個域。</font></p>
<font face="宋體" lang="ZH-CN"><p> 在主窗體的</font>OnCreate<font
face="宋體" lang="ZH-CN">事件中可調用</font>RegisterFormAsOLEDropTorget<font
face="宋體" lang="ZH-CN">。 </p>
</font><p>procedure TOLEFrameForm,FormCreate(Sender : TObject);</p>
<p>begin<font face="宋體" lang="ZH-CN">…</font></p>
<font face="宋體" lang="ZH-CN"><p> </font>Register FormASOleDropTarget(Self,Fmts)</p>
<p>end;<font face="宋體" lang="ZH-CN"> </font></p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" bgcolor="#e0e0e0"><strong><A HREF="022.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="020.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>
</TR>
</table>
</BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -