----VisualBasic5.0是一個功能強大的整合開發環境,它可以自動檢查語法錯誤,提示編碼員語法格式。這些功能都大大提高了編碼效率。可是它作為快捷開發工具,它的特色也突顯在那就是Add-In技術上。利用它,我們可以強化和客製化VB開發環境:可以自動在所有PRoject中自動加入一個模組;可以將每個模組中的某個模組替換成另一個模組;可以在程式中找到某段程式碼,並將它替換掉;理論上講,我們甚至可以利用該技術來做一個程式碼自動生成器。
----Add-In技術的實質就是VB程式環境本身做為一個物件模型向使用者公開出來,我們可以將一個模組、一段程式碼做為一個操作物件來修改、優化。下面,我們透過一個實例來介紹Add-In技術的使用。
----例如,你想將程式中的這樣一段程式碼:
dimnIndexasinteger
nIndex=cStr(vsFlex.Text)
替換為:
dimsIndexasstring
sIndex=Spread.text
----包括Word在內的大多數編輯軟體都不包括多行查找替換功能,VB5.0的編輯器也不例外,怎麼辦呢?
----1、開啟VB,在選擇Project類型時選擇"AddIn"。這樣,我們就打開了一個名叫MyAddin的Project。將Project名稱改為你希望的名字,如"Test"。
----2、開啟Addin.bas,你發現有一個AddToIni的子程式:
SubAddToINI()
DimErrCodeAsLong
ErrCode=WritePrivateProfileString("Add-Ins32","Myaddin.Connect","0","vbaddin.ini")
EndSub
----在Windows的目錄下,有一檔案叫vbaddin.ini,每次VB啟動時將根據該檔案的設定確定有那些可用的AddIn程式。 AddToIni的功能實際上是將目前的程式註冊到vbaddin.ini。修改"Myaddin.Connect"為"Test.Connect",使其與目前的Project名稱對應。
----3、在Immediate視窗執行AddToIni,完成目前Addin的註冊。
----4、開啟Connect.cls,在變數宣告區有:ImplementsIDTExtensibility
----IDTExtensibility是VB和AddIn程式互動的Interface。當VB在Addin選單選AddIdManager,並參考目前的Addin程式"Test"時,OnConnect事件就會觸發,IDTExtensibility_OnConnection()程式將會執行。在如下行設定斷點:
----Debug.PrintVBInst.FullName
----運行當前程式。
----5、啟動另外一個VB例程,產生StandardEXE,名叫Project1。從Addin選單選AddinManager,我們得到一個列表,我們選擇MyAddin並回傳。這時,Test被啟動並停在
----Debug.PrintVBInst.FullName
----注意,VBInstance(VBInst)就是指使用該Addin的VB的整合開發環境(VBEObject)。我們可以它做為一個物件來操作。 VBEObject包含VBProjects,每個VBProject包含Vbcomponents,每個VBComponet對應一個模組,每個Form,Class,或Module。
----6、我們在Test的立即視窗執行:
----? VBInstance.ActiveProject.Name
----可以得到Project1的名稱。
----? VBInstance.ActiveProject.VBComponent(0).Name
----可以得到Project1的第一個模組Form1的名稱。
----到此為止,我們已經基本說明了AddIn的技術內涵。剩下的工作就很容易理解了。
----7、在Project1的AddinManager中,將MyAddin去掉。
----8、再修改Test,打開frmAddin,將
PrivateSubOKButton_Click()
MsgBoxVBInstance.FullName
EndSub
改為:
PrivateSubOKButton_Click()
CallmReplace()
EndSub
PrivateSubmReplace()
DimoProAsVBProject
DimoComAsVBComponent
DimbFindAsBoolean
DimnFindLineasinteger
DimnfindColasinteger
Screen.MousePointer=vbHourglass
OnErrorGoToerrmReplace
SetoPro=VBInstance.ActiveVBProject
'檢查程式是否已儲存
IfoPro.FileName=""ThenMsgBox"請先儲存!";ExitSub
ForEachoComInoPro.VBComponents
bFind=True
DoWhilebFind
'尋找要取代的程式碼段
bFind=oCom.CodeModule.Find("dimnIndexasinteger",nFindLine,nfindCol,oCom.CodeModule.CountOfLines,500,True
IfbFindThen
IfoCom.CodeModule.Lines(nFindLine 1,1)="nIndex=cStr(vsFlex.Text)"
'找到後替換
oCom.CodeModule.ReplaceLine
nFindLine,"dimsIndexasstring"
oCom.CodeModule.ReplaceLine
nFindLine 1,"sIndex=Spread.text"
Else
bFind=false
EndIf
EndIf
Loop
NextoCom
Screen.MousePointer=vbDefault
ExitSub
errmReplace:
Beep
Screen.MousePointer=vbDefault
MsgBox"ERROR!"
EndSub
----9、我們再使Test進入運作狀態。
----10、我們再重複第五步,會在Project1的Addin選單中多一項"MyAddin"。我們在Project1中加入一些要取代的程式碼,然後執行MyAddin,取代工作就會完成。
----11、有朋友不希望在Addin選單中出現"MyAddin"字樣,而是有更明確意義的標識,如"替換"。改動Test的ConnectClass----IDTExtensibility_OnConnection(),將
SetmcbMenuCommandBar=AddToAddInCommandBar("MyAddIn")
改為SetmcbMenuCommandBar=AddToAddInCommandBar("替換")
如果你想將AddinManager中的MyAddin改為
"Replace",可用notepad開啟Connect.cls,將:AttributeVB_Description="MyAdd-In"
改為:AttributeVB_Description="Replace"
----以上介紹地只是AddIn技術的一個簡單應用,了解其機理後,大家可依需求做出自己的工具。對於一些專業的應用軟體開發人員來說,累積越多的AddIn工具,便可大幅提高程式設計效率。 ->