ole控制項

OLE 控制項(現在稱為ActiveX 控制項)OLE(發音為“oh—Lay”)的全稱是:Object Linking and Embedding(對象連結與嵌入)。可以在 Windows 應用程式的對話框中使用,或在全球資訊網的 HTML 頁中使用。

基本介紹

  • 中文名:對象連結與嵌入
  • 外文名:Object Linking and Embedding
  • 現稱:ActiveX 控制項
  • 簡稱:ole控制項
OLE相關術語,對象,

OLE相關術語

1、OLE
OLE的本質就是構件或軟體,所謂構件就是別人已開發好的項目(即應用程式或數據等),可用在新開發的應用程式中而不必重新開發,提高開發效率。
OLE的含義已超出了連結和嵌入這兩項功能,在應用程式中不僅能交換數據,還可交換功能。
2、伺服器應用程式和客戶應用程式
把提供嵌入及連結對象的應用程式,稱為伺服器應用程式(Servers),在VB中也稱為“對象應用程式”。
把接受嵌入及連結對象的應用程式,稱為客戶(Clients)應用程式,在VB中也稱為“控制應用程式”。
3、對象(Object)
指為其它應用程式提供的具有獨立特性的數據或代碼單元。
例如:Microsoft Excel中的一個工作表、或圖畫檔案、聲音檔案、視頻檔案、或一個完整的應用程式等都可作為一個OLE對象。
4、對象連結(Object Linking)
對象連結是指在應用程式中插入對象的占位符(指針),而不是數據本身。
在該對象上看到的只是一個“影像”,真正的數據儲存在一個獨立的檔案中。因此,別的應用程式也可連結到該檔案,當別的應用程式啟動連結對象,並進行修改,則原來連結的應用程式所看到的內容也將跟著變動。“連結”對象的數據儲存在提供連結的應用程式(對象應用程式)那邊。
5、對象嵌入(Object Embedding)
對象嵌入是指將對象嵌入到Clients應用程式中,這樣,嵌入對象將會增加Clients應用程式的大小。用戶可以在Clients應用程式中直接編輯嵌入的對象(編輯時自動開啟製造對象的應用程式讓用戶做編輯工作)。
☆ 對象連結和對象嵌入是兩種不同的數據共享方式,兩者的主要區別在於:
(1)數據存儲的地方不同:
“連結”對象的數據存儲在提供連結的應用程式外邊;
“嵌入”對象的數據存儲在接收嵌入對象的Clients應用程式中。
(2)其它應用程式可以訪問數據的方式不同:
其它應用程式也可以訪問“連結”對象,一個數據源可以連結到多個應用程式。
其它應用程式不能訪問“嵌入”對象中的數據。
(3)影響Clients應用程式軟體的大小不同。

對象

VB提供了一個OLE容器控制項(在工具箱中),用於容納“連結”對象或“嵌入”對象,也就是說,可以使用OLE容器控制項來插入對象。
當然,也可用其它方法來插入對象。如:通過在工具箱中添加對象的類來插入對象,具體操作步驟為:
①→“工程”選單/“部件”命令
②→“可插入對象”選項卡
③→想要加入工具箱的類,如:“Microsoft Excel工作表” →“確定”
在使用OLE容器控制項插入對象時注意:
(1)創建連結時,連結對象數據被存儲在OLE容器控制項之外;
創建嵌入對象時,嵌入對象數據和VB應用程式一起被保存在OLE控制項之內。
(2)在任何時候,一個OLE容器控制項內只能有一個對象。
(3)既可在設計階段來插入對象(創建連結對象或嵌入對象);也可在程式運行階段通過代碼來創建連結對象或嵌入對象。
(4)通過OLE控制項的Display Type屬性可控制OLE對象在OLE容器控制項中的顯示方式:
Display Type :0 → 以“數據映象”方式顯示
Display Type :1 → 以“圖示”方式顯示
一旦建立好一個OLE對象,此對應的OLE對象顯示方式將無法改變。
(5)在OLE容器控制項中放置對象之前提供該對象的應用程式必須已經在Windows中註冊其對象。
1、設計時插入一個“連結”對象
步驟:(1)添加一個“OLE容器控制項”到窗體上,螢幕會彈出一個“插入對象”對話框。或在設定好的“OLE容器控制項”上右擊滑鼠,也會彈出“插入對象”對話框。
(2)選擇“從檔案創建”,再通過“瀏覽”按鈕確定“要連結檔案的路徑、檔案名稱”: ①C:\lyh\gz.xls\Excel工作表
②C:\win98\a.bmp\BMP圖象
(3)單擊“插入”按鈕→返回“插入對象”對話框。
(4)選中“連結”複選框→“確定”。
按照以上步驟,就建立了一個連結對象
此時,OLE控制項本身則保存與對象連結有關的信息。如:提供連結對象的應用程式名、連結檔案名稱、以及該連結對象的“數據影像”等,其對應的OLE控制項屬性分別是:對象類型(Class)、引用源檔案(Source Doc)、連結數據(Source Item)。
[注意]設計連結對象時,OLE會保留一份影像,起初這份影像和數據檔案是相同的,但是因為檔案有可能被修改,可連結對象保存的仍然是原始數據的影像,為了使其具備自動更新的能力,只要在Form_Load事件過程加入如下代碼:
Private sub Form_Load( )
OLE1.Action=6 ‘此語句用“OLE1.Update”方法也可以
End sub
2、設計時創建“嵌入對象
創建嵌入對象時,既可從檔案中嵌入數據,也可以創建一個新的空對象(可以被以後的數據填充)。
步驟:(1)添加一個“OLE容器控制項”到窗體上,螢幕顯示“插入對象”對話框。
(2)選擇“從檔案創建”,→“瀏覽”按鈕→確定要嵌入的“檔案名稱”。
(3)→“插入”按鈕→返回“插入對象”對話框。
(4)→“確定”,即可創建嵌入對象
另外,在此設計狀態,也可修改OLE對象中的數據,方法為:
(1)→在OLE對象數據區單擊滑鼠右鍵,→彈出快捷選單
(2)選擇“編輯”命令→出現Excel的編輯環境。
(3)修改完畢後,單擊OLE對象數據區以外的區域,返回到創建嵌入對象的窗體
[注意]:(1)不同於對象連結的是,嵌入對象中的數據被用戶修改後不會被自動存儲。當含有OLE控制項的窗體被關閉時,與該控制項相關的數據的任何變化將丟失。如果希望對數據所進行的修改在下次運行時能夠顯示出來,需要將更改的數據從對象保存至檔案中(使用OLE控制項的Save To File方法)。數據被保存在檔案後,可以在需要的時候打開檔案並恢復對象(使用OLE控制項的Read From File方法)。
(2)將更改的數據從對象保存到檔案中的方法(用一命令按鈕的單擊事件過程說明):
Private sub CmdSave_click( )
Dim FileNum as integer
FileNum=FreeFile ‘取檔案號
Open “TEST.OLE” For Binary as #FileNum ‘打開要保存的檔案
OLE1.SaveToFile FileNum ‘保存至檔案
Close #FileNum ‘關閉檔案
End sub
(3)將數據從檔案讀入OLE容器控制項(使用OLE控制項的ReadFromFile方法)
用一命令按鈕的單擊事件過程說明:
Private sub CmdOpen_click( )
Dim FileNum as integer
FileNum=FreeFile ‘取檔案號
Open “TEST.OLE” For Binary as #FileNum ‘打開檔案
OLE1.ReadFromFile FileNum ‘讀檔案
Close #FileNum ‘關閉二進制檔案
End sub
3、使用“特殊貼上”對話框創建連結對象或嵌入對象。
設計時創建對象的另一方法是使用“特殊貼上”對話框,套用該方法可以只利用檔案的一部分數據。(如只使用Excel數據表的一部分數據)
步驟:(1)運行一個包含連結或嵌入數據對象的應用程式(如Excel應用程式)。
(2)打開一個檔案,選擇要連結或嵌入的數據。
(3)→“編輯”選單/“複製”命令→複製“數據”到剪貼簿上。
(4)在VB的一個包含OLE控制項的工程中,右擊OLE控制項→選擇“特殊貼上”命令→彈出“選擇性貼上”對話框。
(5)若想建立嵌入對象,選擇“貼上”選項; 若OLE控制項中已有一個對象
若想建立連結對象,選擇“貼上連結”選項; 則會詢問是否刪除現有對象
(6)作出回答後,即在OLE控制項上建立了一個新的對象。
4、利用OLE發出聲音(實例)
步驟:(1)在窗體上添加OLE控制項時,→彈出“插入對象”對話框,
在“對象類型”列表框中選“聲音檔案”;
選擇⊙從檔案創建;
→“瀏覽”按鈕,選擇檔案:C:\windows\Canyon.mid ;
選擇 連結, 顯示為圖示。
(2)單擊“確定”按鈕。
運行程式,雙擊OLE對象,將播放一段音樂。
三、在運行階段創建連結或嵌入對象
要在程式代碼運行時創建連結或嵌入對象,需要了解OLE容器控制項的屬性、事件和方法。
1、OLE容器控制項的屬性、方法、事件:
l Action屬性:指定作用在OLE控制項上的動作(如建立、刪除、啟動等)。
語法為:object.Action=value
value的設定值如下表:
value
描述
方法
0
創建嵌入對象
Create Embed
1
創建連結對象
Create Link
4
將對象複製到系統剪貼簿
Copy
5
將對象從系統剪貼簿複製到OLE容器控制項
Paste
6
從提供對象的應用程式檢索當前數據,並在
OLE容器控制項中將該數據作為圖片顯示。
Update
7
打開一個對象,用於進行諸如編輯那樣的操作
DoVerb
9
關閉對象,並與提供該對象的應用程式終止連線
Close
10
將指定的對象刪除,釋放與之關聯的記憶體
Delete
11
將對象保存到數據檔案中
SaveToFile
12
載入保存到數據檔案中的對象
ReadFromFile
14
顯示“特殊貼上”對話框
PasteSpecialDlg
17
更新對象支持的謂詞列表
FetchVerbs
18
將對象以OLE version 1.0版本的檔案格式保存
SaveToOle1File
l Class屬性(類屬性
格式為:object.class
類名包含幾個部分:application.objecttype.version
類名:說明對象類型。
Application :提供對象的應用程式名
Objecttype :在對象庫中定義的對象名
Version :提供對象的應用程式的版本號
例如:Excel.Sheet.8
l OLEType Allowed屬性
返回或設定OLE容器控制項所能包含的對象類型。
語法為:object.OLETypeAllowed [=value]
value值的設定如下表:
常數
描述
VbOLELinked
0
連結的,OLE容器只能包含連結對象
VbOLEEmbeded
1
嵌入的,OLE容器只能包含內嵌對象
VbOLEEither
2
二者均可(預設值)
l SourceDoc屬性
指定連結或嵌入對象時使用的源檔案名稱。
語法為:object.sourceDoc [=name]
name :指定檔案名稱的字元串表達式
l SourceItem屬性(只對連結有效)
在創建連結對象時,設定或返回要連結的檔案內的數據。
語法為:object.sourceItem [=string]
string :一個指定被連結數據的字元串表達式。
例如:A1 :E1 或 A3C4 :A9D10
[注意]:當使用Action屬性創建連結對象時,用SourceDoc 屬性指定要連結的檔案,使用sourceItem屬性指定在要連結檔案內的數據。
l Create Embed方法
該方法用來創建一個嵌入對象
語法為:object.CreateEmbed sourcedoc[,class]
sourcedoc :必選項,對象從該檔案中創建。
SourceItem :可選項,檔案內的被連結的數據。
l DoVerb方法
打開一個對象(例如編輯一個對象)。
Object.DoVerb[verb]
Verb :可選項,在OLE容器控制項內要執行的對象的謂詞。
l InsertObjDlg方法
顯示插入對象對話框。
語法為:object.InsertObjDlg
[說明](1)用戶在運行這個方法時,將顯示“插入對象”對話框,通過選取對象的類型,來創建連結的或內容嵌的對象,並由應用程式提供該對象。
(2)創建新對象時,與類名(如Excel.EXE)關聯的應用程式,必須已在作業系統中正確地作了註冊。
l PasteSpecialDlg方法
顯示“特殊貼上”對話框。
語法為:object.PasteSpecialDlg
l Updated事件
當一個已創建對象的數據發生改變(修改)時,會引發Updated事件。
l ObjectMove事件
當移動和OLE控制項有關的對象以及調整其大小時,會觸發ObjectMove事件。
l UpdateOptions屬性
在運行時設定當連結數據修改後是否更新連結對象。
語法為:Object.UpdateOptions [=number]
其中Number的設定值為:
0 —— 自動的(預設值),每次改變連結數據時均更新對象
1 —— 凍結的
2 —— 手動的,只有使用Update方法才更新對象
2、運行階段建立連結對象
舉例:(1)在窗體上添加2個OLE容器控制項時,2個命令按鈕
(2)設計代碼:
☆ 要求功能:①OLE1和OLE2連結同一個數據源。
②當改變(修改)OLE1容器控制項中的連結數據時,OLE控制項中連結同一個數據源的數據也要求跟著變化。
Private sub command1_click( )
OLE1.class=”Excel worksheet” 用”Excel.sheet.&”也可以
OLE1.sourceDoc=”C:\My Documents\aa.xls”
OLE1.DrsplayType=0
OLE1.Action=1
OLE2.class=”Excelworksheet”
OLE2.sourceDoc=”C:\My Documents\aa.xls”
OLE2.DisplayType=0
OLE2.Action=1
End sub
Private sub command2_click( )
UnLoad Me
End sub
Private sub OLE1_Updated(code as integer)
OLE2.UpdateOptions=0 ‘用OLE2.Action=6也可以,或OLE2.Update方法也可以
End sub
Private sub OLE2_Updated(code as integer)
OLE1.UpdateOptions=0
End sub
3、運行階段建立嵌入對象
運行時建立嵌入對象的方法與建立連結對象的方法相似,只不過此時在有關代碼中用:
OLE1.Action=0 或使用 CreateEmbed方法。
[注意]:對嵌入對象的任何修改要保存的話,一定要使用前述的SaveToFile方法,將修改的數據保存至某個檔案中,在需要的時候可打開檔案並恢復修改的內容。
補充2:
套用OLE拖放(在你的VB應用程式中支持OLE拖動功能)
一、OLE拖放的含義
指將數據從一個控制項或應用程式移動到另一個控制項或應用程式。
例如:可先選定並拖動Excel中的一列單元,然後將它們放到VB應用程式的DataGrid控制項上。
二、VB控制項的OLE拖放功能
VB的幾乎所有控制項都在某種程度上支持OLE拖放(專業版和企業版)。
1、 自動支持OLE拖放的控制項(既可從控制項拖出,也可在控制項放入)。
DataGrid , PictureBox ,RichTextBox ,Image ,TextBox ,MaskedEditBox
[注意]:要啟動這些控制項的自動OLE拖放功能,應將其OLE Drag Mode屬性和OLEDropMode屬性設定為“自動化”——“Automatic“
2、僅自動支持OLE拖動操作的控制項(僅從控制項拖出)。
ComboBox ,DataListBox ,FileListBox ,DataComboBox ,DirlistBox ,ListBox , TreeView ,ListView等。
[注意]:要啟動這些控制項的自動拖動功能,應將其OLEDragMode設定“自動化”。
3、僅支持OLE拖放事件的控制項
——即可代碼對它們編程,使之成為OLE拖放操作的源,也可使生成為OLE拖放操作的目標。
CheckBox , Frame , OptionButton , CommandButton , Label , DrivelistBox , Data等。
[注意]:(1)為判斷其它ActionX控制項是否支持OLE拖放,應在VB在載入控制項,並檢查OLEDragMode和OLEDropMode屬性是否存在或檢查OLEDrag方法是否存在。
(2)預設規定:在將文本從文本框控制項拖動到word文檔時,文本被移動;若拖動文本的同時按下[Ctrl]鍵,則文本被複製。

相關詞條

熱門詞條

聯絡我們