第八章-對象連結與嵌入(一)(2)

來源:互聯網
上載者:User

8.2 設計狀態OLE對象的建立  

Dephi可以在設計狀態和運行狀態中建立OLE對象。本節介紹設計狀態OLE對象的建立。 

8.2.1 TOLEContainer組件 

要建立OLE對象,需在表單中加入OLE包容器組件。 應用程式組件包含連結或嵌入的對象。用該組件可顯示在OLE伺服器編輯的資料。組件的ObjClass,ObjDoc,ObjItem 屬性分別定義OLE類、檔案、項目。要定義OLE對象是否本地啟用,使用InPlaceActive 屬性。如果OLE對象可以本地啟用,OLE伺服器菜單將與OLE應用程式的菜單進行融合,GroupIndex屬性的值將決定菜單融合情況。 

8.2.2 OLE對象建立的步驟: 

1.在表單中增加OLE包容器組件;

2.在Object inspector中單擊ObjClass或ObjDoc屬性的省略按鈕,將出現插入對象對話方塊;

3.如果要插入的OLE 對象已儲存在檔案中,選擇“Creat From File”,而後定義該對象的檔案名稱和路徑名。如果是連結化物件,則選擇連結檢查框。 如果是內嵌物件,選擇“Creat new”,並在物件類型列表框中選擇OLE對象;

4.選擇OK按鈕;

如果是建立新對象,OLE伺服器將啟用,則可對OLE對象進行編輯,完成編輯後關閉OLE伺服器。典型的例子是單擊伺服器中的“File”或“File|Update”菜單。

5.此時ObjClass屬性中包含了相應的值,如果OLE對象從已存在的檔案中建立或插入一

個連結化物件,ObjDoc屬性包含了OLE檔案。

在設計對象狀態時也可以粘貼OLE對象,其步驟如下:

1.啟用伺服器應用程式,選擇OLE包容器組件;

2.在伺服器中,將資料或對象拷貝到剪下板;

3.進入Delphi整合式開發環境,選擇OLE包容器組件;

4.在 Object inspector表單中選擇ObjItem屬性的省略(…)按鈕;

5.在列表中選擇OLE對象;

6.選擇“Paste"建立一個內嵌物件或選擇"Pastelink"建立連結化物件;

7.選擇OK。

OLE包容器組件在此時初始化。如果粘貼一個內嵌物件,ObjClass屬性將包含適當的值。如果粘貼一連結化物件,ObjClass,ObjDoc,ObjItem屬性將全部定義。OLE 應用程式組件包含代表OLE對象的圖片。

如果OLE伺服器程式支援OLE對象的拖放功能,則在設計狀態從伺服器中拖動對象至應用程式,應用程式將建立連結化物件,具體步驟:

1.啟用伺服器,並Delphi整合開放環境中選擇要連結的對象;

2.按隹滑鼠左鍵拖動OLE對象至設計狀態的表單;

3.鬆開鼠鍵釋放OLE對象。

表單將建立OLE應用程式並進行初始化。 

8.3 OLE應用程式的開發 

Delphi可以在設計狀態和運行狀態建立OLE對象,上一節介紹的是在設計狀態如何建立OLE對象,這一節將通過常式介紹如何在運行狀態建立OLE對象、粘貼對象、拖動對象,以及OLE 對象的檔案操作。我們開發的 OLE.dpr是一個OLE應用程式的執行個體

8.3.1 OLE應用程式介面開發 

OLE.dpr採用了多重文件介面,父表單有菜單,工具條,狀態條,子表單有一個OLE包容器組件,下面分別加以介紹。 

8.3.1.1 OLE應用程式的菜單 

OLE應用程式的菜單與其它應用程式的主菜單大體一致,如果應用程式中有支援本地啟用的OLE 2.0對象,則要進行菜單融合。查閱OLE 伺服器的資料可知道伺服器是否支援本地啟用。

OLE應用程式菜單的GroupIndex屬性決定融合菜單的位置,即融合菜單是更換主菜單,還是插入至應用程式的主菜單中。

OLE伺服器,將融合三組菜單:Edit,View,Help,每組菜單分配了唯一的組索引值。在OLE應用程式中任何索引值為1,3,5的菜單組在菜單融合時被OLE伺服器中具有相應索引值的菜 單更換。在本常式中,編輯功能表項目在菜單融合時被伺服器的"Edit"替換。如圖8.3。 要想儲存應用程式中的菜單,分配有異於1,3,5的索引值。

表8.3 融合後的菜單

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

菜單  索引值    功能描述       來源(OLE啟用時)

────────────────────────────────

檔案   0   使用檔案和退出程式      OLE應用程式

Edit 1 編輯OLE對象         OLE伺服器

對象   2 操作未啟用的OLE對象     OLE應用程式

View 3 修改OLE對象的觀測方式    OLE伺服器

表單  4 操縱表單           OLE應用程式

Help 5 訪問伺服器線上協助      OLE伺服器

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

8.3.1.2 OLE工具條和狀態條 

當OLE對象被本地啟用時,OLE伺服器將試圖用自己的工具條和狀態條替換OLE應用程式的。如果應用程式想要本地啟用, 就應該在應用程式中編寫相應的代碼讓伺服器使用工具條和狀態條。要做到這點,必須:

● 設定工具條和狀態條

● 在應用程式中加入狀態條

 通過修改面板組件的屬性建立工具條和狀態條。

當OLE對象被本地啟用時,面板或其他對齊控制將與OLE伺服器程式進行協調。 這意味

OLE伺服器可以替換OLE應用程式表單中任何對齊控制,但鎖定的控制不能被替換。例如,

如果面板的align屬性是alTop,alleft,alBottom,alIngh時,控制未鎖定,OLE伺服器可以替換。要使應用程式的工具條、狀態條不被替換,可將locked屬性設定成真值。

當OLE 對象被啟用,OLE 伺服器在狀態條中顯示有關資訊時,OLE 應用程式組件的OnStatusLineEvent事件發生,一個文本字元會將從OLE伺服器傳至該事件控制代碼。 OnStatusLineEvent事件控制代碼的MSG參數接受文本字元。

以下代碼用以狀態條接收OLE伺服器的資訊:

procedure TOLEObjectForm.OleContainerStatusLineEvent(Sender: TObject;

Msg: String);

begin

OLEFrameForm.StatusBarPanel.Caption := Msg

end; 

8.3.2 插入OLE對象  

運行狀態時進行對象連結與插入也要用到插入對話方塊,Delphi中沒有插入對話方塊組件,但可調用InsertOLEObjectDlg 函數來顯示對話方塊。 

8.3.2.1 InsertOLEObjectDlg函式宣告如下: 

function InsertOleObjectDlg(Form: TForm; HelpContext: THelpContext;

var PInitInfo: Pointer): Boolean;

其中參數Form是擁有插入對話方塊的表單,一般將擁有OLE包容器組件的表單名字傳給Form.

參數Helplontext為插入對象對話方塊定義線上協助,如果應用程式沒有線上協助, HelpContext的值為零,對話方塊中將不出現協助按鈕。

參數PInitInfo是一個無類型指標,該指標指向一個包含初始化OLE 組件資訊的內部資料結構。InsertOLEObjectDlg修改這個指標以指向一個有效資料結構,該結構包含了對話方塊列表中被選擇的OLE 對象初始化資訊。當該指標被使用後,應調用ReleaseOLEInitInfo過程釋放初始化資訊所佔用的記憶體。

當使用者選擇OK 按鈕關閉插入對象對話方塊,InsertOLEObjectDlg 返回真值,並把 PInitInfo指向包含OLE對象的初始化資訊的資料結構。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.