通過開發VB外掛程式來擴充VB應用
來源:互聯網
上載者:User
使用外掛程式功能擴充VB<br /> 摘要:本文通過執行個體介紹如何開發一個VB的外掛程式來擴充VB的應用。包括如何?外掛程式與VB開發環境的串連,控制VB開發環境,以及簡要介紹外掛程式對象的結構。</p><p> 文章內容<br /> 一、外掛程式介紹<br /> 從結構上來看,一個VB外掛程式實際上是一個COM組件,原則上組件可以使用支援COM的開發工具,例如Delphi、VC來編寫。組件通過實現COM中的IDTExtensibility對象來建立與VB的串連。組件註冊以後,當VB運行中在Add-In菜單中裝載組件後,VB就會調用組件中IDTExtensibility對象中的相應方法(如在裝載組件後會調用OnConnection方法)。這時整個外掛程式就成為VB的一部分從而可以訪問VB開發環境中的各種對象和資源了。<br /> 利用VB本身來編寫外掛程式是一個很好的辦法,首先通過VB可以快速建立一個IDTExtensibility對象架構(當然在VB中不叫這個名稱);其次VB對於整個開發環境都提供了相應的對象供外掛程式訪問和控制,而使用外掛程式的主要目的就是通過外掛程式來控制宿主程式;最後是調試十分的方便,可以直接運行看結果,不需要編譯註冊。</p><p> 二、建立程式架構<br /> 首先我們來建立程式架構,以下的代碼和說明都是使用Win2K+VB6中文企業版完成的,在VB英文版以及Win9X下運行通過只是程式中對於介面的說明根據不同的VB會有不同。<br /> 開啟VB,點擊菜單中的 檔案 | 建立 項,在 建立工程 視窗中選擇“增益集” 項(在英文版中是Addin),然後點擊確定按鈕建立外掛程式工程。<br /> 建立完畢後在工程列表視窗中可以看到新工程的名稱為MyAddIn。其中包含兩個對象,在表單類中包含frmAddIn表單,在設計器類中包含Connect設計器對象。VB已經為外掛程式設立了一個基本架構,下面按F5運行外掛程式並將VB主視窗最小化。然後再開啟一個VB程式,在其中建立一個標準 Exe工程。點擊菜單的 增益集 | 增益集管理器 項。在開啟的增益集管理器視窗的列表中可以看到其中有一個My Add-In 項,點擊該項,然後將下面 載入行為(英文版中是Load Behavior) 地區中的三個複選框都選中後點擊確定按鈕裝載外掛程式。然後再點擊“增益集” 菜單,再點擊其中新添加的 My AddIn 項。可以看到外掛程式彈出一個表單,點擊“確定”按鈕可以獲得VB啟動並執行目錄,點擊“取消”按鈕關閉表單。<br /> 接下來再次開啟增益集管理器視窗。選中 My Add-In項,將 載入行為 地區中的三個複選框中的對勾去掉。然後回到運行外掛程式的VB程式,點擊停止按鈕停止外掛程式的執行。<br /> 回到外掛程式工程中,我們主要來看Connect對象,開啟Connect對象的代碼視窗。可以看到其中包含兩個對象:AddinInstance和MenuHandler。其中AddInstance是工程中實現同VB介面的對象。在程式中對應AddInstance包含兩個方法:OnConnection和OnDisconnection。在這裡我們稱它們為方法而不是事件,是因為它們是由VB調用而不是由某個訊息引發而由系統調用的。<br /> OnConnection方法在外掛程式裝載使被調用,其中的參數Application是調用外掛程式的VB執行個體對象。這個對象是一個VBE類對象。由VB傳遞給外掛程式外掛程式就可以通過Application對象訪問和控制調用自己的VB執行個體。其中比較重要的是這一段:<br /> If ConnectMode = ext_cm_External Then<br /> Me.Show<br /> Else<br /> Set mcbMenuCommandBar = AddToAddInCommandBar("AddInSample")<br /> Set Me.MenuHandler = VBInstance. Events. CommandBarEvents (mcbMenuCommandBar)<br /> End If<br />在上面的程式段中,首先通過ConnectMode來判斷外掛程式被裝載的方式,如果是不是通過外部程式啟動的話,首先調用AddToAddInCommandBar方法添加一個功能表項目到 增益集 功能表列。<br />添加了功能表項目後,外掛程式程式還必須能夠響應對菜單的點擊做響應,VB支援外掛程式對自身的很多事件監控,包括點擊菜單、工具列按鈕、開啟工程、添加/刪除工程中的檔案等等。對應每一種事件,VB執行個體都包含有一個相應的事件對象。對象可以通過VB執行個體對象的Events屬性獲得或者設定。在外掛程式程式中可以事先定義一個事件對象並編寫好對象的事件響應代碼,然後將該對象賦予VB執行個體對象中的相應事件對象。在上面的程式中,需要外掛程式監控對添加的功能表項目的點擊事件,那麼首先在程式中首先定義了一個With Events的對象MenuHandler。並在程式中編寫對象的Click事件代碼,然後在OnConnection方法中用<br /> Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar)<br />將MenuHandler設定為建立的菜單對象的事件對象,那麼當在VB中點擊 My Add-In項後,VB就會調用MenuHandle的Click事件代碼。</p><p>三、完善程式<br />從上面的分析可以得知,程式架構實現了VB與外掛程式間的介面和外掛程式監控VB事件。接下來要實現外掛程式對VB的控制<br />在VB調用外掛程式對象的OnConnection方法時,會將自身作為一個VBE對象傳遞給外掛程式供訪問及操作。VBE對象是VB執行個體的根對象,其下包含以下5類基本的對象集合:<br />VBProjects集合:通過該集合可以訪問VB執行個體中所包含的工程。<br />Windows集合:通過該集合可以訪問所有的視窗,包括控制項欄、屬性欄以及工程中的表單等。<br />CodePanes集合:通過該集合可以訪問所有的代碼視窗。可以獲得代碼視窗中的代碼以及改變其中的代碼。<br />CommandBars 集合:通過該集合可以訪問VB執行個體中的所有命令欄,包括支援快速菜單的命令欄。<br />Events 集合:通過該集合外掛程式可以訪問VB中的所有事件對象。<br />下面的程式我們要實現的是:當點擊 My-Addin菜單時,在當前工程中添加一個模組並在其中添加一個子程式,並讓使用者選擇在工程中的表單中選擇一個表單添加一個CommandButton控制項,並向表單的代碼視窗寫入代碼使得點擊CommmandButton控制項就執行添加的子程式。<br />開啟工程中的frmAddIn表單,在其中添加一個CommandButton控制項和一個ListBox控制項。<br />在frmAddIn的Load事件中添加如下代碼:<br />Dim mCop As Object</p><p> '獲得當前啟動工程中的所有對象<br /> For Each mCop In VBInstance.VBProjects.StartProject.VBComponents<br /> '如果對象是表單類型就將其添加到ListBox中<br /> If mCop.Type = vbext_ct_VBForm Then<br /> List1.AddItem mCop.Name<br /> End If<br /> Next</p><p> If List1.ListCount 0 Then<br /> xComp.CodeModule.InsertLines lCount + 1, "mClick"<br /> End If<br /> 運行程式,再次開啟另一個VB程式建立一個標準Exe工程。並裝載 My AddIn外掛程式,點擊菜單的 My AddIn項,然後在快顯視窗中選擇工程中的一個表單,然後點擊 Add Code 按鈕,可以看到工程中新添加了一個ModuleTemp模組,並且你選擇的表單中添加了一個CommandButton按鈕。通過前面的介紹以及上面代碼的注釋,相信大家對於外掛程式如何通過VBE對象控制VB可能有一個比較基本的瞭解了。<br /> 上面的程式只是基本的介紹了VB外掛程式的實現。通過完善可以形成一個功能齊全的外掛程式程式,例如你可以將所積累很多年的代碼儲存到一個檔案中,然後通過一個外掛程式讓使用者可以方便的選擇添加他們所需要的部分到自己的程式中。<br /> 上面就是文章的全內容,如果大家在編程方面有什麼問題,歡迎到我的網站www.applevb.com上同我一起探討<br />www.applevb.com<br />