?? 021.htm
字號:
lang="ZH-CN">對象的創建 </p>
<p> </font>Dephi<font face="宋體" lang="ZH-CN">可以在設計狀態和運行狀態中創建</font>OLE<font
face="宋體" lang="ZH-CN">對象。本節介紹設計狀態</font>OLE<font face="宋體"
lang="ZH-CN">對象的創建。 </p>
</font><p>8.2.1 TOLEContainer<font face="宋體" lang="ZH-CN">部件 </p>
<p> 要創建</font>OLE<font face="宋體" lang="ZH-CN">對象,需在窗體中加入</font>OLE<font
face="宋體" lang="ZH-CN">包容器部件。</font> <font face="宋體" lang="ZH-CN">應用程序部件包含鏈接或嵌入的對象。用該部件可顯示在</font>OLE<font
face="宋體" lang="ZH-CN">服務器編輯的數據。部件的</font>ObjClass,ObjDoc,ObjItem
<font face="宋體" lang="ZH-CN">屬性分別定義</font>OLE<font face="宋體"
lang="ZH-CN">類、文件、項目。要定義</font>OLE<font face="宋體" lang="ZH-CN">對象是否本地激活,使用</font>InPlaceActive
<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>GroupIndex<font
face="宋體" lang="ZH-CN">屬性的值將決定菜單融合情況。 </p>
</font><p>8.2.2 OLE<font face="宋體" lang="ZH-CN">對象創建的步驟: </p>
<p> </font>1.<font face="宋體" lang="ZH-CN">在窗體中增加</font>OLE<font
face="宋體" lang="ZH-CN">包容器部件;</p>
<p> </font>2.<font face="宋體" lang="ZH-CN">在</font>Object inspector<font
face="宋體" lang="ZH-CN">中單擊</font>ObjClass<font face="宋體" lang="ZH-CN">或</font>ObjDoc<font
face="宋體" lang="ZH-CN">屬性的省略按鈕,將出現插入對象對話框;</font></p>
<p> 3.<font face="宋體" lang="ZH-CN">如果要插入的</font>OLE
<font face="宋體" lang="ZH-CN">對象已存儲在文件中,選擇“</font>Creat From
File<font face="宋體" lang="ZH-CN">”,而后定義該對象的文件名和路徑名。如果是鏈接對象,則選擇鏈接檢查框。</font>
<font face="宋體" lang="ZH-CN">如果是嵌入對象,選擇“</font>Creat new<font
face="宋體" lang="ZH-CN">”,并在對象類型列表框中選擇</font>OLE<font
face="宋體" lang="ZH-CN">對象;</p>
<p> </font>4.<font face="宋體" lang="ZH-CN">選擇</font>OK<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>File<font
face="宋體" lang="ZH-CN">”或“</font>File|Update<font face="宋體" lang="ZH-CN">”菜單。</p>
<p> </font>5.<font face="宋體" lang="ZH-CN">此時</font>ObjClass<font
face="宋體" lang="ZH-CN">屬性中包含了相應的值,如果</font>OLE<font
face="宋體" lang="ZH-CN">對象從已存在的文件中創建或插入一</p>
<p>個鏈接對象,</font>ObjDoc<font face="宋體" lang="ZH-CN">屬性包含了</font>OLE<font
face="宋體" lang="ZH-CN">文件。</p>
<p> 在設計對象狀態時也可以粘貼</font>OLE<font face="宋體" lang="ZH-CN">對象,其步驟如下:</p>
<p> </font>1.<font face="宋體" lang="ZH-CN">激活服務器應用程序,選擇</font>OLE<font
face="宋體" lang="ZH-CN">包容器部件;</p>
<p> </font>2.<font face="宋體" lang="ZH-CN">在服務器中,將數據或對象拷貝到剪切板;</p>
<p> </font>3.<font face="宋體" lang="ZH-CN">進入</font>Delphi<font face="宋體"
lang="ZH-CN">集成開發環境,選擇</font>OLE<font face="宋體" lang="ZH-CN">包容器部件;</p>
<p> </font>4.<font face="宋體" lang="ZH-CN">在</font> Object inspector<font
face="宋體" lang="ZH-CN">窗體中選擇</font>ObjItem<font face="宋體" lang="ZH-CN">屬性的省略</font>(<font
face="宋體" lang="ZH-CN">…</font>)<font face="宋體" lang="ZH-CN">按鈕;</p>
<p> </font>5.<font face="宋體" lang="ZH-CN">在列表中選擇</font>OLE<font
face="宋體" lang="ZH-CN">對象;</p>
<p> </font>6.<font face="宋體" lang="ZH-CN">選擇“</font>Paste"<font
face="宋體" lang="ZH-CN">創建一個嵌入對象或選擇</font>"Pastelink"<font
face="宋體" lang="ZH-CN">創建鏈接對象;</p>
<p> </font>7.<font face="宋體" lang="ZH-CN">選擇</font>OK<font face="宋體"
lang="ZH-CN">。</font></p>
<p>OLE<font face="宋體" lang="ZH-CN">包容器部件在此時初始化。如果粘貼一個嵌入對象,</font>ObjClass<font
face="宋體" lang="ZH-CN">屬性將包含適當的值。如果粘貼一鏈接對象,</font>ObjClass,ObjDoc,ObjItem<font
face="宋體" lang="ZH-CN">屬性將全部定義。</font>OLE <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">對象的拖放功能,則在設計狀態從服務器中拖動對象至應用程序,應用程序將創建鏈接對象,具體步驟:</p>
<p> </font>1.<font face="宋體" lang="ZH-CN">激活服務器,并</font>Delphi<font
face="宋體" lang="ZH-CN">集成開放環境中選擇要鏈接的對象;</p>
<p> </font>2.<font face="宋體" lang="ZH-CN">按隹鼠標左鍵拖動</font>OLE<font
face="宋體" lang="ZH-CN">對象至設計狀態的窗體;</p>
<p> </font>3.<font face="宋體" lang="ZH-CN">松開鼠鍵釋放</font>OLE<font
face="宋體" lang="ZH-CN">對象。</p>
<p> 窗體將創建</font>OLE<font face="宋體" lang="ZH-CN">應用程序并進行初始化。 </p>
</font><p>8.3 OLE<font face="宋體" lang="ZH-CN">應用程序的開發 </p>
<p> </font>Delphi<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.dpr<font
face="宋體" lang="ZH-CN">是一個</font>OLE<font face="宋體" lang="ZH-CN">應用程序的實例</font></p>
<p>8.3.1 OLE<font face="宋體" lang="ZH-CN">應用程序界面開發 </p>
<p> </font>OLE.dpr<font face="宋體" lang="ZH-CN">采用了多文檔界面,父窗體有菜單,工具條,狀態條,子窗體有一個</font>OLE<font
face="宋體" lang="ZH-CN">包容器部件,下面分別加以介紹。 </p>
</font><p>8.3.1.1 OLE<font face="宋體" lang="ZH-CN">應用程序的菜單 </p>
<p> </font>OLE<font face="宋體" lang="ZH-CN">應用程序的菜單與其它應用程序的主菜單大體一致,如果應用程序中有支持本地激活的</font>OLE
2.0<font face="宋體" lang="ZH-CN">對象,則要進行菜單融合。查閱</font>OLE <font
face="宋體" lang="ZH-CN">服務器的資料可知道服務器是否支持本地激活。</p>
<p> </font>OLE<font face="宋體" lang="ZH-CN">應用程序菜單的</font>GroupIndex<font
face="宋體" lang="ZH-CN">屬性決定融合菜單的位置,即融合菜單是更換主菜單,還是插入至應用程序的主菜單中。</p>
<p> </font>OLE<font face="宋體" lang="ZH-CN">服務器,將融合三組菜單</font>:Edit,View,Help<font
face="宋體" lang="ZH-CN">,每組菜單分配了唯一的組索引值。在</font>OLE<font
face="宋體" lang="ZH-CN">應用程序中任何索引值為</font>1,3,5<font
face="宋體" lang="ZH-CN">的菜單組在菜單融合時被</font>OLE<font face="宋體"
lang="ZH-CN">服務器中具有相應索引值的菜</font> <font face="宋體"
lang="ZH-CN">單更換。在本例程中,編輯菜單項在菜單融合時被服務器的</font>"Edit"<font
face="宋體" lang="ZH-CN">替換。如圖</font>8.3<font face="宋體" lang="ZH-CN">。</font>
<font face="宋體" lang="ZH-CN">要想保存應用程序中的菜單,分配有異于</font>1,3,5<font
face="宋體" lang="ZH-CN">的索引值。</font></p>
<p><font face="宋體" lang="ZH-CN">表</font>8.3 <font face="宋體" lang="ZH-CN">融合后的菜單</font></p>
<p><font face="宋體" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font></p>
<p><font face="宋體" lang="ZH-CN">菜單</font> <font face="宋體" lang="ZH-CN"> 索引值 功能描述 來源</font>(OLE<font
face="宋體" lang="ZH-CN">激活時</font>)</p>
<p><font face="宋體" lang="ZH-CN">────────────────────────────────</font></p>
<p><font face="宋體" lang="ZH-CN">文件 </font> 0 <font face="宋體" lang="ZH-CN"> 使用文件和退出程序 </font>
OLE<font face="宋體" lang="ZH-CN">應用程序</font></p>
<p>Edit 1 <font face="宋體" lang="ZH-CN">編輯</font>OLE<font face="宋體"
lang="ZH-CN">對象 </font> OLE<font face="宋體" lang="ZH-CN">服務器</font></p>
<p><font face="宋體" lang="ZH-CN">對象 </font> 2 <font face="宋體" lang="ZH-CN">操作未激活的</font>OLE<font
face="宋體" lang="ZH-CN">對象 </font> OLE<font face="宋體" lang="ZH-CN">應用程序</font></p>
<p>View 3 <font face="宋體" lang="ZH-CN">修改</font>OLE<font face="宋體"
lang="ZH-CN">對象的觀測方式 </font> OLE<font face="宋體" lang="ZH-CN">服務器</font></p>
<p><font face="宋體" lang="ZH-CN">窗體 </font> 4 <font face="宋體" lang="ZH-CN">操縱窗體 </font>
OLE<font face="宋體" lang="ZH-CN">應用程序</font></p>
<p>Help 5 <font face="宋體" lang="ZH-CN">訪問服務器在線幫助 </font> <font
face="宋體" lang="ZH-CN"> </font>OLE<font face="宋體" lang="ZH-CN">服務器</font></p>
<p><font face="宋體" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
</font><p>8.3.1.2 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>
<font face="宋體" lang="ZH-CN">就應該在應用程序中編寫相應的代碼讓服務器使用工具條和狀態條。要做到這點,必須:</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">設置工具條和狀態條</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">在應用程序中加入狀態條</p>
<p> 通過修改面板部件的屬性創建工具條和狀態條。</p>
<p> 當</font>OLE<font face="宋體" lang="ZH-CN">對象被本地激活時,面板或其他對齊控制將與</font>OLE<font
face="宋體" lang="ZH-CN">服務器程序進行協調。</font> <font face="宋體"
lang="ZH-CN">這意味</font></p>
<p>OLE<font face="宋體" lang="ZH-CN">服務器可以替換</font>OLE<font face="宋體"
lang="ZH-CN">應用程序窗體中任何對齊控制,但鎖定的控制不能被替換。例如,</font>
</p>
<font face="宋體" lang="ZH-CN"><p>如果面板的</font>align<font face="宋體"
lang="ZH-CN">屬性是</font>alTop,alleft,alBottom,alIngh<font face="宋體" lang="ZH-CN">時,控制未鎖定,</font>OLE<font
face="宋體" lang="ZH-CN">服務器可以替換。要使應用程序的工具條、狀態條不被替換,可將</font>locked<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>OnStatusLineEvent<font
face="宋體" lang="ZH-CN">事件發生,一個文本字符會將從</font>OLE<font
face="宋體" lang="ZH-CN">服務器傳至該事件句柄。</font> OnStatusLineEvent<font
face="宋體" lang="ZH-CN">事件句柄的</font>MSG<font face="宋體" lang="ZH-CN">參數接受文本字符。</font></p>
<p><font face="宋體" lang="ZH-CN">以下代碼用以狀態條接收</font>OLE<font
face="宋體" lang="ZH-CN">服務器的信息:</font></p>
<p>procedure TOLEObjectForm.OleContainerStatusLineEvent(Sender: TObject;</p>
<p>Msg: String);</p>
<p>begin</p>
<p>OLEFrameForm.StatusBarPanel.Caption := Msg</p>
<p>end; </p>
<p>8.3.2 <font face="宋體" lang="ZH-CN">插入</font>OLE<font face="宋體" lang="ZH-CN">對象</font>
</p>
<p><font face="宋體" lang="ZH-CN">
運行狀態時進行對象鏈接與插入也要用到插入對話框,</font>Delphi<font
face="宋體" lang="ZH-CN">中沒有插入對話框部件,但可調用</font>InsertOLEObjectDlg
<font face="宋體" lang="ZH-CN">函數來顯示對話框。 </p>
</font><p>8.3.2.1 InsertOLEObjectDlg<font face="宋體" lang="ZH-CN">函數聲明如下: </p>
</font><p>function InsertOleObjectDlg(Form: TForm; HelpContext: THelpContext;</p>
<p>var PInitInfo: Pointer): Boolean;</p>
<font face="宋體" lang="ZH-CN"><p> 其中參數</font>Form<font face="宋體"
lang="ZH-CN">是擁有插入對話框的窗體,一般將擁有</font>OLE<font
face="宋體" lang="ZH-CN">包容器部件的窗體名字傳給</font>Form.</p>
<p><font face="宋體" lang="ZH-CN">參數</font>Helplontext<font face="宋體"
lang="ZH-CN">為插入對象對話框定義在線幫助,如果應用程序沒有在線幫助,</font>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -