對象鏈接和嵌入(Object Linking and Embeding)是一組服務功能,它提供了一種用源於不同應用程序的信息創建復合文檔的強有力方法。 對象可以是幾乎所有的信息類型,如文字、位圖、矢量圖形,甚至於聲音注解和錄像剪輯等。
Windows附件組中的書寫器是應用OLE的實例,使用單擊“對象 | 插入”菜單項, 書寫器彈出插入對話框,對話框中列出了多個OLE服務器程序,如公式編輯工具,繪圖工具,報表生成工具。用戶雙擊鼠標左鍵,可激活一個OLE服務器。在OLE服務器中可編輯OLE對象,當用戶返回到書寫器中時,在書寫器文檔中將出現OLE對象。
Delphi支持OLE技術,Delphi1.0可以創建OLE應用程序,Delphi2.0可創建OLE自動化服務器和控制器程序。本章通過例程介紹對象鏈接與嵌入的基本概念,Delphi創建OLE對象的方法,OLE自動化的概念以及如何開發OLE自動化服務器和控制器。
8.1 OLE簡介
8.1.1 OLE1.0和OLE2.0
迄今為止,有兩種版本的OLE:OLE1.0和OLE2.0。當用戶在OLE1.0 服務器中激活OLE對象,服務器程序在前台打開自己的窗體,並獲得焦點。OLE窗體失去焦點,存在於單獨的窗體之中。
OLE2.0服務器采用“本地”(in place)激活方式。本地激活意味著服務器菜單與應用程序菜單要進行融合,服務器的狀態條更換應用程序狀態條,服務器的工具條更換應用程序工具條。OLE對象在應用程序窗體中進行編輯,但所有過程均由服務器處理。
創建OLE對象的服務器決定了OLE的激活方式。如果一個OLE1.0的對象在OLE2.0 編譯的應用程序中打開,它將采用OLE1.0的方式。
8.1.2 鏈接與嵌入
鏈接對象的數據保存在OLE服務器創建的文件中,嵌入對象的數據保存在OLE應用程序中。
鏈接對象必須以文件形式保存,只有對OLE服務器已經創建好的OLE對象, 才能進行OLE鏈接,鏈接的OLE對象文件可被OLE應用程序或其它程序進行修改,OLE 服務器和其它OLE應用程序也可以訪問和修改OLE對象。對象數據保存在某一處,但可以被多個應用程序訪問。
Delphi應用程序可以得到OLE對象文件中的最新數據。當OLE 對象數據被應用程序修改時,這些變化將在所有包含該對象的其它應用程序中體現。
嵌入對象保存在OLE應用程序中,其它應用程序不能訪問該對象。只有在OLE應用程序中激活OLE對象才能對其進行編輯。嵌入的OLE對象不需要保存在文件中,所有數據都在應用程序中,這就確保了OLE數據不會被偶然地刪除或修改。不足之處是應用程序的規模因為保存了OLE數據而增大了 。
如果用戶想保存對嵌入對象的修改,可以把OLE數據存入文件中,本章第3 節將詳細討論這個問題。
表8.1 使用鏈接或嵌入的原則。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
何時使用鏈接 何時使用嵌入
───────────────────────────────
想要對源對象進行修改及將 對源對象進行修改,並將這
這些修改反映到其他與源對 些修改反映在一個特定的應
象鏈接的應用程序或文本中 用程序或文本中
源對象可能被多個OLE應 源對象不可能被一個OLE應
用程序應用程序頻繁修改 用程序頻繁修改
源對象的文件不會被頻繁移 源對象的文件可能被頻繁移
動,且不會被刪除 動,且不會被刪除
對象很大,一般通過網絡或 對象很小,或對象很大卻無法
電子郵件進行分配 通過網絡或電子郵件進行分配
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8.1.3 設計狀態OLE對象的創建
在Delphi中,可分別在設計狀態或運行狀態創建OLE對象,表8.2說明了兩種狀態創建對象的差別。
表8.2 設計、運行狀態OLE對象的創建
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
設計狀態OLE對象的創建 運行狀態OLE對象的創建