OLE(對(duì)象連接與嵌入)_第1頁
OLE(對(duì)象連接與嵌入)_第2頁
OLE(對(duì)象連接與嵌入)_第3頁
OLE(對(duì)象連接與嵌入)_第4頁
OLE(對(duì)象連接與嵌入)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、OLEOLE1OLE概述OLE控件通常用來創(chuàng)建以文檔處理為中心的應(yīng)用程序,在這種應(yīng)用程序中,你把不同應(yīng)用程序的數(shù)據(jù)組合起來,創(chuàng)建單個(gè)文檔。這種類型的應(yīng)用程序可能是字處理器,允許用戶輸入文本之后再嵌入一個(gè)工作表或圖表。2鏈接的對(duì)象鏈接一個(gè)對(duì)象時(shí),實(shí)際上是在應(yīng)用程序中插入鏈接對(duì)象的占位符。例如,當(dāng)把電子表格單元的范圍與Visual Basic應(yīng)用程序鏈接時(shí),與這個(gè)單元相關(guān)的數(shù)據(jù)是存儲(chǔ)在另一文件中的;在OLE控件中,只存儲(chǔ)數(shù)據(jù)的鏈接和代表數(shù)據(jù)鏈接的圖像。運(yùn)行時(shí),可以激活鏈接對(duì)象,電子表格應(yīng)用程序便自動(dòng)啟動(dòng),然后你可以使用電子表格應(yīng)用程序來編輯那些電子表格單元。當(dāng)編輯一個(gè)鏈接對(duì)象時(shí),編輯操作是在OLE

2、控件外的單獨(dú)窗口中完成的。當(dāng)對(duì)象與Visual Basic應(yīng)用程序鏈接時(shí),可以從數(shù)據(jù)鏈接的應(yīng)用程序中查看對(duì)象的當(dāng)前數(shù)據(jù)。數(shù)據(jù)只存在于提供對(duì)象的應(yīng)用程序。3嵌入的對(duì)象使用OLE控件,或把一個(gè)對(duì)象的類加入工具箱,可以創(chuàng)建嵌入對(duì)象。使用嵌入的對(duì)象,與對(duì)象相關(guān)的全部數(shù)據(jù)都將被復(fù)制和納入OLE控件,把控件的內(nèi)容存入文件時(shí),這個(gè)文件含有創(chuàng)建對(duì)象的應(yīng)用程序名稱,對(duì)象數(shù)據(jù)和對(duì)象的源文件包含的圖像。由于這個(gè)原因,嵌入對(duì)象可能會(huì)大大增加文件的大小。與鏈接對(duì)象不同,其它應(yīng)用程序不能訪問嵌入對(duì)象中的數(shù)據(jù)。當(dāng)想要應(yīng)用程序保持在另一應(yīng)用程序中創(chuàng)建和編輯的數(shù)據(jù)時(shí),嵌入是有效的手段。對(duì)于嵌入的對(duì)象,當(dāng)你激活對(duì)象時(shí),創(chuàng)建這個(gè)對(duì)

3、象的Active X部件被容器應(yīng)用程序調(diào)用,這個(gè)對(duì)象的數(shù)據(jù)被打開和編輯。另外,還在容器應(yīng)用程序中顯示創(chuàng)建這個(gè)對(duì)象的應(yīng)用程序的用戶界面和功能區(qū),使用戶能現(xiàn)場(chǎng)控制對(duì)象。4設(shè)計(jì)時(shí)用OLE控件插入對(duì)象把OLE控件拖到窗體上,彈出【插入對(duì)象】對(duì)話框,單擊【從文件中創(chuàng)建】單選框,單擊【瀏覽】按鈕,彈出【瀏覽】對(duì)話框,選擇想要插入的文件,單擊【插入】按鈕,返回【插入對(duì)象】對(duì)話框,在【插入對(duì)象】對(duì)話框中,單擊【確定】按鈕,創(chuàng)建嵌入對(duì)象。嵌入對(duì)象的數(shù)據(jù)是有可能被更改的。如果讓用戶輸入的更改在下次應(yīng)用程序運(yùn)行時(shí)出現(xiàn),就必須使用Save To File方法來保存數(shù)據(jù)。5運(yùn)行時(shí)用OLE控件創(chuàng)建對(duì)象要在運(yùn)行時(shí)創(chuàng)建鏈接和

4、嵌入對(duì)象,需要在代碼中使用OLE控件的方法和屬性。通過使用OLE對(duì)象的Object屬性,可以使用鏈接或嵌入對(duì)象的屬性和方法。Object屬性時(shí)運(yùn)行時(shí)只讀屬性,保持對(duì)OLE控件的對(duì)象的引用,使用這個(gè)屬性執(zhí)行OLE控件的自動(dòng)化任務(wù),以及程序化操作對(duì)象支持的屬性和方法??梢允褂肙LE控件的Create Link方法,先運(yùn)行時(shí)從文件中創(chuàng)建一個(gè)鏈接對(duì)象,這種方法需要源文件的參數(shù),還有一個(gè)可選的源數(shù)據(jù)的參數(shù),提供可鏈接的數(shù)據(jù)。要在運(yùn)行中創(chuàng)建一個(gè)嵌入的對(duì)象,可以使用Create Embed方法。這種方法有源文件和類型兩個(gè)參數(shù),但也可以不設(shè)置源文件和類型的屬性。使用Do Verb的方法。Do Verb方法的動(dòng)

5、詞依照應(yīng)用程序而定,可以創(chuàng)建一個(gè)空的嵌入對(duì)象。為了把OLE控件與存儲(chǔ)在數(shù)據(jù)庫(kù)引擎或Access 2007數(shù)據(jù)庫(kù)中的數(shù)據(jù)綁定,需要在Data Source屬性中規(guī)定數(shù)據(jù)源,并在OLE控件的Data Field屬性中規(guī)定來自數(shù)據(jù)源的字段的名稱。6運(yùn)行時(shí)允許用戶規(guī)定對(duì)象用OLE控件的Insert OBJ DLG方法顯示【插入對(duì)象】對(duì)話框,或者用Paste Special DLG方法顯示【選擇性粘貼】對(duì)話框,讓你決定什么對(duì)象進(jìn)入OLE容器控件。7決定在OLE容器控件中如何顯示對(duì)象可以用OLE容器控件的Display Type屬性標(biāo)識(shí)對(duì)象是否將作為圖標(biāo)出現(xiàn),或者對(duì)象的數(shù)據(jù)是否被顯示在控件中,這個(gè)屬性還決

6、定了在運(yùn)行時(shí)和設(shè)計(jì)時(shí),顯示【插入對(duì)象】和【選擇性粘貼】對(duì)話框時(shí),【顯示為圖標(biāo)】復(fù)選框的默認(rèn)設(shè)置。如果這個(gè)控件不是用戶界面正在使用的,可以用Size Mode屬性確定對(duì)象的圖標(biāo)或數(shù)據(jù)的圖像在OLE控件中是如何顯示的。在Size Mode設(shè)置為0或3,會(huì)剪切圖像以適合控件,但不改變圖像的實(shí)際尺寸,設(shè)置Size Mode為2,將調(diào)整控件的大小以適合圖像。8激活OLE控件中的對(duì)象在運(yùn)行時(shí),OLE控件的Do Verb方法可以激活一個(gè)對(duì)象??梢栽O(shè)置App Is Running為True,啟動(dòng)ActiveX部件,從而使對(duì)象更快地激活。有些嵌入的對(duì)象可以從OLE控件內(nèi)部激活,叫做現(xiàn)場(chǎng)激活,因?yàn)槟憧梢耘c提供對(duì)象

7、的應(yīng)用程序交互,而不切換到其它應(yīng)用程序或窗口。當(dāng)OLE控件的Auto Active屬性設(shè)置為Double-Click時(shí),用戶可以用雙擊來激活控件。9響應(yīng)移動(dòng)容器或調(diào)整容器大小OLE控件具有Object Move事件,當(dāng)移動(dòng)與OLE控件相關(guān)的對(duì)象以及調(diào)整其大小時(shí),將會(huì)觸發(fā)它。Object Move的參數(shù)代表對(duì)象容器內(nèi)對(duì)象的坐標(biāo)。如果對(duì)象移出窗體,參數(shù)的值代表與窗體左上角的相對(duì)位置。這些值可正可負(fù)。如果Active X部件的寬和高被改變,會(huì)通知OLE控件。Object Move事件是OLE控件確定對(duì)象是否已經(jīng)移動(dòng)或調(diào)整大小的唯一方法。10保存和檢索嵌入的數(shù)據(jù)與嵌入的對(duì)象相關(guān)的數(shù)據(jù)不是永久保存的,含

8、有OLE控件的窗體被關(guān)閉時(shí),與這個(gè)控件相關(guān)的數(shù)據(jù)的任何變化將丟失。要把更改的數(shù)據(jù)從對(duì)象保存到文件中,需要使用OLE控件的Save To File方法,這時(shí)對(duì)象的數(shù)據(jù)由OLE控件維護(hù),并能用Visual Basic應(yīng)用程序保存。OLE控件中的對(duì)象只能保存于打開的二進(jìn)制文件中。要想數(shù)據(jù)從對(duì)象保存到文件中,可打開二進(jìn)制文件,使用Save To File方法。要想數(shù)據(jù)從文件讀入OLE容器控件,可以打開二進(jìn)制文件,使用對(duì)象的Read From File方法。當(dāng)對(duì)象的內(nèi)容被改變,將調(diào)用Updated事件,這個(gè)事件用于決定對(duì)象的數(shù)據(jù)在最后一次保存時(shí)是否被更改。為此,在Updated事件中設(shè)一個(gè)全局的變量,指

9、示需要保存的對(duì)象。保存對(duì)象時(shí),重新設(shè)置這個(gè)變量。OLE控件大大增強(qiáng)了Visual Basic處理數(shù)據(jù)的能力,在使用OLE容器控件時(shí),需要?jiǎng)?chuàng)建、激活OLE控件的對(duì)象,最后要注意保存對(duì)象中的數(shù)據(jù)。11和OLE拖放相關(guān)的屬性、事件和方法為了判斷其它Active X控件是否支持OLE拖放,應(yīng)該在Visual Basic中加載控件,并檢查OLE Drag Mode和OLE Drop Mode屬性,或者OLE Drag方法是否存在。窗體、文檔對(duì)象、用戶控件和屬性頁都有OLE Drag Mode屬性,而且只支持手工拖放。12啟動(dòng)自動(dòng)OLE拖放若控件支持自動(dòng)拖放,則可把它的OLE Drag Mode和OLE

10、Drop Mode屬性中至少一個(gè)設(shè)置為Automatic,從而對(duì)Visual Basic控件向外拖動(dòng)數(shù)據(jù)或向內(nèi)放置數(shù)據(jù)。把文本從文本框控件拖動(dòng)到Word 2007文檔時(shí),文檔被移動(dòng)到文檔。如果放文本的同時(shí)按控制鍵,則數(shù)據(jù)被復(fù)制到文檔。對(duì)所有支持OLE拖放的對(duì)象或應(yīng)用程序,這都是一個(gè)默認(rèn)屬性。要改變這種狀態(tài),需要使用手工拖放技術(shù)修改自動(dòng)性能。為使文本框控件在OLE拖放操作中自動(dòng)獲得數(shù)據(jù),應(yīng)把它的OLE Drop Mode屬性設(shè)置為Automatic。 運(yùn)行時(shí),除非在拖動(dòng)時(shí)按下了控制鍵,否則,對(duì)于從其它應(yīng)用程序拖動(dòng)到文本框控件的數(shù)據(jù),進(jìn)行的是移動(dòng)而不是復(fù)制操作。自動(dòng)拖放操作也有其局限性,其中某些來

11、自控件功能本身。Word 2007文檔中的文本拖動(dòng)到文本框控件,則Word 2007文檔里的文本格式就會(huì)消失。因?yàn)槲谋究蚩丶恢С诌@種格式。13OLE拖放的Data Object對(duì)象在Visual Basic里,數(shù)據(jù)的媒介或存儲(chǔ)是Data Object對(duì)象這意味著通過它把數(shù)據(jù)從源移動(dòng)到目標(biāo)。為此,Data Object對(duì)象提供了為存儲(chǔ)、獲取與分析數(shù)據(jù)所需的方法。把這些方法與OLE拖放事件結(jié)合使用就可以管理源端和目標(biāo)端的Data Object對(duì)象里的數(shù)據(jù)。14OLE拖放的工作原理在對(duì)Visual Basic應(yīng)用程序進(jìn)行OLE拖放的操作過程中,當(dāng)你選定數(shù)據(jù)并按下鼠標(biāo)左鍵,從OLE拖動(dòng)源拖動(dòng)數(shù)據(jù)時(shí),

12、觸發(fā)OLE Start Drag事件,然后就可存儲(chǔ)數(shù)據(jù),也可以指定源所支持的格式。還需指明,源允許復(fù)制數(shù)據(jù)還是允許移動(dòng)數(shù)據(jù)。在拖動(dòng)數(shù)據(jù)經(jīng)過目標(biāo)應(yīng)用程序時(shí),觸發(fā)OLE Drag Over事件,源位于目標(biāo)應(yīng)用程序的邊界內(nèi)。在這里放下數(shù)據(jù),可以指定目標(biāo)程序要執(zhí)行的操作。在這里放下源,則目標(biāo)指定所產(chǎn)生的拖放效果,這時(shí)觸發(fā)一個(gè)OLE Give Feedback事件,向用戶提供視覺反饋,鼠標(biāo)指針發(fā)生變化,指示操作的類型。按住鼠標(biāo)左鍵時(shí)按下了上檔鍵、控制鍵或換檔鍵,或源數(shù)據(jù)在目標(biāo)應(yīng)用程序邊界內(nèi)移動(dòng)時(shí),數(shù)據(jù)可能被拒絕,而不是被復(fù)制或移動(dòng)。如果移動(dòng)時(shí)超出目標(biāo)應(yīng)用程序的邊界,或按取消鍵,則可能會(huì)取消或修改拖動(dòng)操作

13、,鼠標(biāo)指針會(huì)變成禁止形。當(dāng)把源數(shù)據(jù)放到目標(biāo)應(yīng)用程序時(shí)把觸發(fā)目標(biāo)應(yīng)用程序的OLE Drag Drop事件,目標(biāo)應(yīng)用程序就源數(shù)據(jù)所包含的數(shù)據(jù)的格式查詢?cè)?,然后獲取數(shù)據(jù)或拒絕數(shù)據(jù)。如果在拖動(dòng)開始時(shí)就已存儲(chǔ)數(shù)據(jù),則目標(biāo)應(yīng)用程序?qū)⑹褂肎et Data方法獲取數(shù)據(jù),如果在拖動(dòng)開始時(shí)未存儲(chǔ)數(shù)據(jù),則通過觸發(fā)OLE Set Data事件并使用Set Data方法獲取數(shù)據(jù)。在接受數(shù)據(jù)或拒絕數(shù)據(jù)時(shí)將觸發(fā)OLE Complete Drag事件,然后源將執(zhí)行相應(yīng)操作。如果接受數(shù)據(jù)并指定一個(gè)移動(dòng),則源把刪除數(shù)據(jù)。15OLE Drag方法在選定數(shù)據(jù)后,按住鼠標(biāo)左鍵并移動(dòng)鼠標(biāo)時(shí),從對(duì)象的鼠標(biāo)移動(dòng)事件調(diào)用OLE Drag方法。

14、OLE Drag方法沒有任何參數(shù),其主要目的是啟動(dòng)手工拖動(dòng),然后允許OLE Start Drag事件設(shè)置拖動(dòng)操作的條件。如果源控件支持OLE Drag Mode屬性,這個(gè)屬性必須設(shè)置為手工,調(diào)用OLE Drag方法。16指定拖放效果和數(shù)據(jù)格式在手工OLE拖動(dòng)操作中,當(dāng)你開始拖動(dòng)操作中,當(dāng)你開始拖動(dòng)源并調(diào)用OLE Drag方法時(shí),控件的OLE Start Drag事件將會(huì)發(fā)生??梢杂眠@個(gè)事件指定拖放效果和源所支持的數(shù)據(jù)格式。OLE Start Drag事件用兩個(gè)參數(shù)指定支持的數(shù)據(jù)格式,以及放下數(shù)據(jù)時(shí)指定是復(fù)制數(shù)據(jù)還是移動(dòng)數(shù)據(jù)。Allowed effects參數(shù)指定拖動(dòng)源所支持的拖放效果。然后,目

15、標(biāo)可向拖動(dòng)源查詢這個(gè)信息并作相應(yīng)的響應(yīng)。Allowed effects參數(shù)使用下述數(shù)值指定放下效果??梢酝ㄟ^設(shè)置OLE Start Drag事件的Format參數(shù)指定對(duì)象支持的數(shù)據(jù)格式。為此應(yīng)該使用Set Data方法。目標(biāo)可查閱源,從而可以判斷支持何種數(shù)據(jù)格式并作出相應(yīng)的響應(yīng),如果目標(biāo)不支持所放下數(shù)據(jù)的格式,它就會(huì)繼續(xù)放下數(shù)據(jù)。17把數(shù)據(jù)放到Data Object對(duì)象中在多數(shù)情況下,特別是在源支持兩種以上的格式或花費(fèi)大量時(shí)間創(chuàng)建數(shù)據(jù)時(shí),可能會(huì)希望只在目標(biāo)請(qǐng)求數(shù)據(jù)時(shí),才把數(shù)據(jù)放入Data Object對(duì)象。在開始拖動(dòng)操作時(shí),可以使用OLE Start Drag事件中的Set Data方法把數(shù)據(jù)

16、放入Data Object對(duì)象。用Clear方法清除Data Object對(duì)象中的默認(rèn)數(shù)據(jù)格式,并指定所選定數(shù)據(jù)的數(shù)據(jù)格式,然后又用Set Data方法把數(shù)據(jù)放入Data Object對(duì)象。18OLE Drag Over事件狀態(tài)參數(shù)根據(jù)位置的不同,效果參數(shù)可能會(huì)相應(yīng)變化,指示當(dāng)前可接受的拖放效果。有了OLE Drag Over事件中的狀態(tài)參數(shù),就可對(duì)數(shù)據(jù)進(jìn)入、經(jīng)過以及離開目標(biāo)控件等狀態(tài)作出響應(yīng)。源數(shù)據(jù)進(jìn)入目標(biāo)控件時(shí),把狀態(tài)參數(shù)設(shè)置為零,在目標(biāo)邊界內(nèi)移動(dòng)拖動(dòng)源時(shí),把狀態(tài)參數(shù)設(shè)置為2。有時(shí)希望根據(jù)鼠標(biāo)指針的位置的不同改變拖動(dòng)效果。每秒都會(huì)幾次生成OLE Drag Over事件,即使在鼠標(biāo)不動(dòng)時(shí)也不

17、例外。19效果參數(shù)如果希望改變OLE拖放操作中默認(rèn)的鼠標(biāo)外觀,可以在目標(biāo)端操作Drag Over事件,并在源端操作OLE Give Feedback事件。在拖放操作期間,OLE拖放提供自動(dòng)視覺反饋。開始拖動(dòng)時(shí),鼠標(biāo)指針會(huì)發(fā)生變化,當(dāng)經(jīng)過不支持OLE放下的對(duì)象時(shí),鼠標(biāo)指針將變成禁止形。把鼠標(biāo)放入目標(biāo)控件時(shí),改變鼠標(biāo)指針指出控件如何響應(yīng),首先用Get Format方法判斷Data Object對(duì)象里的數(shù)據(jù)類型,然后設(shè)置OLE Drag Over事件的效果參數(shù)以通知源,這個(gè)控件允許何種放下效果。在把目標(biāo)控件的OLE Drop Mode屬性設(shè)置為手工時(shí),拖動(dòng)數(shù)據(jù)無論何時(shí)經(jīng)過這個(gè)控件都觸發(fā)OLE Dra

18、g Over事件,如果放下了對(duì)象,則用OLE Drag Over事件的效果參數(shù)指定執(zhí)行的操作。OLE Give Feedback事件包含其自身的效果參數(shù),用這個(gè)參數(shù)向用戶提供視覺反饋,當(dāng)拖動(dòng)選定時(shí),依據(jù)這個(gè)反饋執(zhí)行操作。在拖動(dòng)源數(shù)據(jù)經(jīng)過目標(biāo)并觸發(fā)OLE Drag Over事件時(shí),源會(huì)告訴目標(biāo),它允許什么效果。此后,必須選擇唯一效果。OLE Drag Over事件的效果參數(shù)通知源,它支持哪一個(gè)放下操作,然后,源又用OLE Give Feedback事件改變鼠標(biāo)指針,以這個(gè)方式通知用戶。OLE Give Feedback事件包含兩個(gè)參數(shù),使用它們可以改變OLE拖放操作中的默認(rèn)鼠標(biāo)指針。效果參數(shù)像其

19、它OLE拖放事件一樣,指出是復(fù)制、移動(dòng)還是拒絕數(shù)據(jù),但它在這個(gè)事件中,這個(gè)參數(shù)意在通過改變鼠標(biāo)指針來指出操作類型,向你提供自定義的視覺反饋。默認(rèn)光標(biāo)參數(shù)指示是否使用默認(rèn)的OLE鼠標(biāo)指針的集合,設(shè)置為False,可以用Screen對(duì)象的Mouse Pointer屬性指定自己的指針。20獲取數(shù)據(jù)把源放到目標(biāo)時(shí)會(huì)觸發(fā)OLE Drag Drop事件。在啟動(dòng)拖動(dòng)操作時(shí),如果已把數(shù)據(jù)放到Data Object對(duì)象中,可以在觸發(fā)OLE Drag Drop事件時(shí)使用Get Data方法獲取數(shù)據(jù)。但是,如果啟動(dòng)拖動(dòng)操作時(shí)聲明了所支持的源的格式,則這個(gè)方法自動(dòng)在源觸發(fā)OLE Set Data事件,這個(gè)事件把數(shù)據(jù)放到Data Object對(duì)象中,然

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論