對象鏈接和嵌入(Object Linking and Embeding)是一組服務功能它提供了一種用源於不同應用程序的信息創建復合文檔的強有力方法 對象可以是幾乎所有的信息類型如文字位圖矢量圖形甚至於聲音注解和錄像剪輯等
Windows附件組中的書寫器是應用OLE的實例使用單擊對象 | 插入菜單項 書寫器彈出插入對話框對話框中列出了多個OLE服務器程序如公式編輯工具繪圖工具報表生成工具用戶雙擊鼠標左鍵可激活一個OLE服務器在OLE服務器中可編輯OLE對象當用戶返回到書寫器中時在書寫器文檔中將出現OLE對象
Delphi支持OLE技術Delphi可以創建OLE應用程序Delphi可創建OLE自動化服務器和控制器程序本章通過例程介紹對象鏈接與嵌入的基本概念Delphi創建OLE對象的方法OLE自動化的概念以及如何開發OLE自動化服務器和控制器
OLE簡介
OLE和OLE
迄今為止有兩種版本的OLE:OLE和OLE當用戶在OLE 服務器中激活OLE對象服務器程序在前台打開自己的窗體並獲得焦點OLE窗體失去焦點存在於單獨的窗體之中
OLE服務器采用本地(in place)激活方式本地激活意味著服務器菜單與應用程序菜單要進行融合服務器的狀態條更換應用程序狀態條服務器的工具條更換應用程序工具條OLE對象在應用程序窗體中進行編輯但所有過程均由服務器處理
創建OLE對象的服務器決定了OLE的激活方式如果一個OLE的對象在OLE 編譯的應用程序中打開它將采用OLE的方式
鏈接與嵌入
鏈接對象的數據保存在OLE服務器創建的文件中嵌入對象的數據保存在OLE應用程序中
鏈接對象必須以文件形式保存只有對OLE服務器已經創建好的OLE對象 才能進行OLE鏈接鏈接的OLE對象文件可被OLE應用程序或其它程序進行修改OLE 服務器和其它OLE應用程序也可以訪問和修改OLE對象對象數據保存在某一處但可以被多個應用程序訪問
Delphi應用程序可以得到OLE對象文件中的最新數據當OLE 對象數據被應用程序修改時這些變化將在所有包含該對象的其它應用程序中體現
嵌入對象保存在OLE應用程序中其它應用程序不能訪問該對象只有在OLE應用程序中激活OLE對象才能對其進行編輯嵌入的OLE對象不需要保存在文件中所有數據都在應用程序中這就確保了OLE數據不會被偶然地刪除或修改不足之處是應用程序的規模因為保存了OLE數據而增大了
如果用戶想保存對嵌入對象的修改可以把OLE數據存入文件中本章第 節將詳細討論這個問題
使用鏈接或嵌入的原則
想要對源對象進行修改及將這些修改反映到其他與源對象鏈接的應用程序或文本中源對象可能被多個OLE應用程序應用程序頻繁修改源對象的文件不會被頻繁移動且不會被刪除
對象很大一般通過網絡或電子郵件進行分配
對源對象進行修改並將這些修改反映在一個特定的應用程序或文本中源對象不可能被一個OLE應用程序頻繁修改源對象的文件可能被頻繁移動且不會被刪除
對象很小或對象很大卻無法通過網絡或電子郵件進行分配
設計狀態OLE對象的創建
在Delphi中可分別在設計狀態或運行狀態創建OLE對象表說明了兩種狀態創建對象的差別
設計運行狀態OLE對象的創建
對象保存在運行文件中增加了所需編譯的程序的規模開發者需在設計時訪問OLE服務器運行時OLE對象已經創建減小了運行時間 OLE對象在設計運行時間可行性編輯應用程序的OLE對象數目在設計時已經確立
對象保存在一個文件中或只在運行時才有減小了編譯程序的規模開發者不需要在設計時訪問OLE服務器運行時OLE對象已經創建增加了運行時間OLE對象只能在運行時編輯應用程序可以在運行時創建新的OLE對象 在設計狀態OLE服務器不能被本地激活只能在自己的窗體內激活但在運行狀態
只要OLE服務器支持本地激活就可以使用這種方式
OLE類文件項目
OLE類決定創建OLE對象的服務器有些應用程序需要創建多種類型的OLE對象例如應用程序同時鏈接或嵌入公式圖片等OLE類也決定OLE對象所包含的數據類型鏈接或嵌入對象均要定義OLE類
OLE文件是包含OLE對象數據的源文件鏈接對象必須使用對象文件因為鏈接對象在文件中保存如果應用程序從已存在的源文件中創建嵌入對象也要使用OLE文件例如如果鏈接到QuattiPro筆記本的OLE對象TUTORWBI存儲在D:\DFFICE\QPW目錄下則OLE文件就是D:\DFFICE\QPW\TUTORWBI值得注意的是OLE文件只能為鏈接對象所定義而對於嵌入對象只需定義OLE類
OLE項目是代表鏈接或嵌入數據的OLE文件中的一部分當應用程序希望OLE對象包含比OLE文件小的數據塊時則必須使用OLE項目
例如在QuattiPro筆記本中OLE對象鏈接了GasCosts的B 到B 范圍的網格OLE項目是$GasCosts;$B$$B$
設計狀態OLE對象的創建
Dephi可以在設計狀態和運行狀態中創建OLE對象本節介紹設計狀態OLE對象的創建
TOLEContainer部件
要創建OLE對象需在窗體中加入OLE包容器部件 應用程序部件包含鏈接或嵌入的對象用該部件可顯示在OLE服務器編輯的數據部件的ObjClassObjDocObjItem 屬性分別定義OLE類文件項目要定義OLE對象是否本地激活使用InPlaceActive 屬性如果OLE對象可以本地激活OLE服務器菜單將與OLE應用程序的菜單進行融合GroupIndex屬性的值將決定菜單融合情況
OLE對象創建的步驟
在窗體中增加OLE包容器部件
在Object inspector中單擊ObjClass或ObjDoc屬性的省略按鈕將出現插入對象對話框
如果要插入的OLE 對象已存儲在文件中選擇Creat From File而後定義該對象的文件名和路徑名如果是鏈接對象則選擇鏈接檢查框 如果是嵌入對象選擇Creat new並在對象類型列表框中選擇OLE對象
選擇OK按鈕
如果是創建新對象OLE服務器將激活則可對OLE對象進行編輯完成編輯後關閉OLE服務器典型的例子是單擊服務器中的File或File|Update菜單
此時ObjClass屬性中包含了相應的值如果OLE對象從已存在的文件中創建或插入一
個鏈接對象ObjDoc屬性包含了OLE文件
[] [] [] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/25219.html