荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huanghm (东方不败), 信区: Program
标  题: 使用ADD-IN技术加强VB开发环境
发信站: BBS 荔园晨风站 (Tue Jun  2 05:27:50 1998), 转信

  VB 5.0 是一个功能强大的集成开发环境,它可以自
动检查语法错误,提示编码员语法格式,大大提高编码效率
。可是作为快捷开发工具,它的特点还突出体现在Add-I
n技术上。利用它,我们可以强化和定制VB开发环境;可以
自动在所有Project中自动加入一个模块;可以将每个模
块中的某个模块替换成另一个模块;可以在程序中查找某
段代码,并将它替换掉;理论上甚至可以利用该技术做一
个代码自动生成器。

  Add-In技术的实质就是VB编程环境本身作为一个对
象模型向用户公开出来,我们可以将一个模块、一段代码
做为一个操作对象来修改、优化。下面,通过一个实例来
介绍Add-In技术的使用。

  例如,你想将程序中的这样一段代码:

  dim nIndex as integer

  nIndex=cStr(vsFlex.Text)

  替换为:

  dim sIndex as string

  sIndex=Spread.text

  包括Word在内的大多数编辑软件都不包括多行查找替
换功能,VB5.0的编辑器也不例外,怎么办呢?

  1、 打开VB,在选择Project类型时选择“Add In”
。这样,我们就打开了一个名叫My Addin的Project。将Pr
oject 名称改为你希望的名字,如“Test”。

  2、 打开Addin.bas ,你发现有一个AddToIni的子程
序:

  Sub AddToINI()

  Dim ErrCode As Long

  ErrCode = WritePrivateProfileString("Add-Ins3
2", "Myaddin.Connect", "0", "vbaddin.ini")

  End Sub

  在Windows的目录下,有一文件叫vbaddin.ini , 每
次VB启动时将根据该文件的设置确定有那些可用的AddIn
程序。AddToIni 的功能实际就是将当前的程序注册到vbad
din.ini。修改"Myaddin.Connect"为"Test.Connect",使
之与当前的Project 名称对应。

  3、 在Immediate 窗口执行AddToIni ,完成对当前A
ddin的注册。

  4、 打开Connect.cls,在变量声明区有:

  Implements IDTExtensibility

  IDTExtensibility是VB和AddIn程序交互的Interface
。当VB在Addin菜单选AddId Manager,并参照 当前的Add
in程序“Test”时,OnConnect事件就会触发,IDTExtens
ibility—OnConnection()程序将被执行。在如下行设
置断点:

  Debug.Print VBInst.FullName

  运行当前程序。

  5、 启动另外一个VB例程,生成Standard EXE,名叫P
roject1。从Addin菜单选Addin Manager,我们得到一个
列表,选择My Addin并返回。这时,Test被启动并停在

  Debug.Print VBInst.FullName

  注意,VBInstance(VBInst)就是指使用该Addin的VB
的集成开发环境(VBEObject)。可以把它作为一个对象来操
作。VBEObject包含VBProjects,每个VBProject包含Vbcom
ponents,每个VBComponet对应一个模块,每个Form, Clas
s,或Module。

  6、 在Test的立即窗口执行:

  ?VBInstance.ActiveProject.Name

  可以得到Project1的名称。

  ?VBInstance.ActiveProject.VBComponent(0).Name


  可以得到Project1的第一个模块Form1的名称。

  到此为止,我们已经基本说明了AddIn的技术内涵。
剩下的工作就很容易理解了。

  7、 在Project1的Addin Manager中,将MyAddin去掉


  8、 再修改Test,打开frmAddin,将

  Private Sub OKButton—Click()

   MsgBox VBInstance.FullName

  End Sub

  改为:

  Private Sub OKButton—Click()

   Call mReplace()

  End Sub

  Private Sub mReplace()

  Dim oPro As VBProject

  Dim oCom As VBComponent

  Dim bFind As Boolean

  Dim nFindLine as integer

  Dim nfindCol as integer

  Screen.MousePointer = vbHourglass

  On Error GoTo errmReplace

  Set oPro = VBInstance.ActiveVBProject

  '检查程序是否已保存

  If oPro.FileName = "" Then MsgBox "请先保存!"
; Exit Sub

  For Each oCom In oPro.VBComponents

   bFind = True

   Do While bFind

   '查找要替换的代码段

   bFind=oCom.CodeModule.Find("dim nIndex as in
teger", nFindLine, nfindCol, —

   oCom.CodeModule.CountOfLines, 500, True

   If bFind Then

   If oCom.CodeModule.Lines(nFindLine+1, 1)
= "nIndex=cStr(vsFlex.Text)"

   '找到后替换

   oCom.CodeModule.ReplaceLine nFindLine,
"dim sIndex as string"

   oCom.CodeModule.ReplaceLine nFindLine+
1, "sIndex=Spread.text"

   Else

   bFind=false

   End If

   End If

   Loop

  Next oCom

  Screen.MousePointer = vbDefault

  Exit Sub

   errmReplace:

   Beep

   Screen.MousePointer = vbDefault

   MsgBox "ERROR!"

  End Sub

  9、 再使Test进入运行状态。

  10、 再重复第五步,会在Project1的Addin菜单中多
一项“My Addin”。我们在Project1中加入一些要替换的
代码,然后执行My Addin,替换工作就会完成。

  11、 有朋友不希望在Addin菜单出现“My Addin”字
样,而是具有更明确含义的标识,如“替换”。 改动Tes
t的Connect Class——IDTExtensibility—OnConnection
(),将

  Set mcbMenuCommandBar = AddToAddInCommandBar("
My AddIn")

  改为

  Set mcbMenuCommandBar = AddToAddInCommandBar("
替换")

  如果你想将Addin Manager中的My Addin 改为 “Rep
lace”,可用notepad打开Connect.cls,将:

  Attribute VB—Description = "My Add-In"

  改为:

  Attribute VB—Description = "Replace"

  以上介绍地只是AddIn技术的一个简单应用,了解其
机理后,大家可根据需要做出自己的工具。
--

※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.25]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店