Windows附件組中的書(shū)寫(xiě)器是應用OLE的實(shí)例,使用單擊“對象 | 插入”菜單項, 書(shū)寫(xiě)器彈出插入對話(huà)框,對話(huà)框中列出了多個(gè)OLE服務(wù)器程序,如公式編輯工具,繪圖工具,報表生成工具。用戶(hù)雙擊鼠標左鍵,可激活一個(gè)OLE服務(wù)器。在OLE服務(wù)器中可編輯OLE對象,當用戶(hù)返回到書(shū)寫(xiě)器中時(shí),在書(shū)寫(xiě)器文檔中將出現OLE對象。
Delphi支持OLE技術(shù),Delphi1.0可以創(chuàng )建OLE應用程序,Delphi2.0可創(chuàng )建OLE自動(dòng)化服務(wù)器和控制器程序。本章通過(guò)例程介紹對象鏈接與嵌入的基本概念,Delphi創(chuàng )建OLE對象的方法,OLE自動(dòng)化的概念以及如何開(kāi)發(fā)OLE自動(dòng)化服務(wù)器和控制器?!?/p>
8.1 OLE簡(jiǎn)介
8.1.1 OLE1.0和OLE2.0
迄今為止,有兩種版本的OLE:OLE1.0和OLE2.0。當用戶(hù)在OLE1.0 服務(wù)器中激活OLE對象,服務(wù)器程序在前臺打開(kāi)自己的窗體,并獲得焦點(diǎn)。OLE窗體失去焦點(diǎn),存在于單獨的窗體之中。
OLE2.0服務(wù)器采用“本地”(in place)激活方式。本地激活意味著(zhù)服務(wù)器菜單與應用程序菜單要進(jìn)行融合,服務(wù)器的狀態(tài)條更換應用程序狀態(tài)條,服務(wù)器的工具條更換應用程序工具條。OLE對象在應用程序窗體中進(jìn)行編輯,但所有過(guò)程均由服務(wù)器處理。
創(chuàng )建OLE對象的服務(wù)器決定了OLE的激活方式。如果一個(gè)OLE1.0的對象在OLE2.0 編譯的應用程序中打開(kāi),它將采用OLE1.0的方式?!?/p>
8.1.2 鏈接與嵌入
鏈接對象的數據保存在OLE服務(wù)器創(chuàng )建的文件中,嵌入對象的數據保存在OLE應用程序中。
鏈接對象必須以文件形式保存,只有對OLE服務(wù)器已經(jīng)創(chuàng )建好的OLE對象, 才能進(jìn)行OLE鏈接,鏈接的OLE對象文件可被OLE應用程序或其它程序進(jìn)行修改,OLE 服務(wù)器和其它OLE應用程序也可以訪(fǎng)問(wèn)和修改OLE對象。對象數據保存在某一處,但可以被多個(gè)應用程序訪(fǎng)問(wèn)。
Delphi應用程序可以得到OLE對象文件中的最新數據。當OLE 對象數據被應用程序修改時(shí),這些變化將在所有包含該對象的其它應用程序中體現。
嵌入對象保存在OLE應用程序中,其它應用程序不能訪(fǎng)問(wèn)該對象。只有在OLE應用程序中激活OLE對象才能對其進(jìn)行編輯。嵌入的OLE對象不需要保存在文件中,所有數據都在應用程序中,這就確保了OLE數據不會(huì )被偶然地刪除或修改。不足之處是應用程序的規模因為保存了OLE數據而增大了 。
如果用戶(hù)想保存對嵌入對象的修改,可以把OLE數據存入文件中,本章第3 節將詳細討論這個(gè)問(wèn)題。
表8.1 使用鏈接或嵌入的原則。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
何時(shí)使用鏈接 何時(shí)使用嵌入
───────────────────────────────
想要對源對象進(jìn)行修改及將 對源對象進(jìn)行修改,并將這
這些修改反映到其他與源對 些修改反映在一個(gè)特定的應
象鏈接的應用程序或文本中 用程序或文本中
源對象可能被多個(gè)OLE應 源對象不可能被一個(gè)OLE應
用程序應用程序頻繁修改 用程序頻繁修改
源對象的文件不會(huì )被頻繁移 源對象的文件可能被頻繁移
動(dòng),且不會(huì )被刪除 動(dòng),且不會(huì )被刪除
對象很大,一般通過(guò)網(wǎng)絡(luò )或 對象很小,或對象很大卻無(wú)法
電子郵件進(jìn)行分配 通過(guò)網(wǎng)絡(luò )或電子郵件進(jìn)行分配
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8.1.3 設計狀態(tài)OLE對象的創(chuàng )建
在Delphi中,可分別在設計狀態(tài)或運行狀態(tài)創(chuàng )建OLE對象,表8.2說(shuō)明了兩種狀態(tài)創(chuàng )建對象的差別?!?/p>
表8.2 設計、運行狀態(tài)OLE對象的創(chuàng )建
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
設計狀態(tài)OLE對象的創(chuàng )建 運行狀態(tài)OLE對象的創(chuàng )建
──────────────────────────────────────
對象保存在運行文件中,增加了所需 對象保存在一個(gè)文件中或只在運行時(shí)
編譯的程序的規?! ?才有,減小了編譯程序的規?!?/p>
開(kāi)發(fā)者需在設計時(shí)訪(fǎng)問(wèn)OLE服務(wù)器 開(kāi)發(fā)者不需要在設計時(shí)訪(fǎng)問(wèn)OLE服務(wù)器
運行時(shí)OLE對象已經(jīng)創(chuàng )建,減小了 運行時(shí)OLE對象已經(jīng)創(chuàng )建,增加了運行
運行時(shí)間 時(shí)間
OLE對象在設計運行時(shí)間可行性編輯 OLE對象只能在運行時(shí)編輯
應用程序的OLE對象數目在設計時(shí)已 應用程序可以在運行時(shí)創(chuàng )建新的OLE對
經(jīng)確立 象
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
在設計狀態(tài),OLE服務(wù)器不能被本地激活,只能在自己的窗體內激活。但在運行狀態(tài),
只要OLE服務(wù)器支持本地激活,就可以使用這種方式?!?/p>
8.1.4 OLE類(lèi)、文件、項目
OLE類(lèi)決定創(chuàng )建OLE對象的服務(wù)器。有些應用程序需要創(chuàng )建多種類(lèi)型的OLE對象,例如應用程序同時(shí)鏈接或嵌入公式、圖片等。OLE類(lèi)也決定OLE對象所包含的數據類(lèi)型,鏈接或嵌入對象均要定義OLE類(lèi)。
OLE文件是包含OLE對象數據的源文件。鏈接對象必須使用對象文件,因為鏈接對象在文件中保存。如果應用程序從已存在的源文件中創(chuàng )建嵌入對象,也要使用OLE文件。例如,如果鏈接到QuattiPro筆記本的OLE對象TUTOR.WBI存儲在D:\DFFICE\QPW目錄下,則OLE文件就是D:\DFFICE\QPW\TUTOR.WBI。值得注意的是OLE文件只能為鏈接對象所定義,而對于嵌入對象,只需定義OLE類(lèi)。
OLE項目是代表鏈接或嵌入數據的OLE文件中的一部分。當應用程序希望OLE對象包含比OLE文件小的數據塊時(shí),則必須使用OLE項目。
例如,在QuattiPro筆記本中,OLE對象鏈接了GasCosts的B4 到B5 范圍的網(wǎng)格,OLE項目是$GasCosts;$B$4.$B$5?!?/p>
聯(lián)系客服