模块可以说是一个抽象类,也即接口;然后建立其它的类模块,在这些类模块的声明部分中,使用Implements语句表明该类实现了上述接口,接下来就可以实现接口代码(也即接口的方法)了。这种用Implements语句的方法可以说与Java语言比较相似。至于这方面的详细信息,可参看VB的帮助或联机手册。
在类模块Connect中,使用Implements IDTExtensibility语句声明该类实现了IDTExtensibility接口。因此类模块Connect中实现了该接口包括的四个方法:OnAddInsUpdate,OnConnection,OnDisconnection,OnStartupComplete的代码,例如一条语句、过程调用、注释等等。如果过程是空的话,它会被编译器删掉。如果实在没有代码可往这些过程里加的话,就插入注释。这是因为既然实现了接口,就必须提供接口的所有方法的代码。这四种方法中,比较关键的是OnConnection和OnDisconnection方法,其中OnConnection方法当一个外接程序通过“外接程序管理器”对话框或另一个个接程序与Visual BasicIDE连接时被调用。我们一般在该方法中保存当前Visual Basic会话期实例,挂接VB菜单,工具栏,或显示初始窗口,以便用户使用该外接程序。而OnDisconnection方法当外接程序通过编程或“外接程序管理器”对话框与Visual BasicIDE分离时被调用。我们一般在该方法中卸掉菜单、工具栏、
程序窗体,以及做保存设置等工作。
(2)挂接Visual BasicIDE菜单
在接口IDTExtensibility的OnConnection方法代码中,一般来说大多数情况下需要挂接Visual BasicIDE菜单(当然也可以是工具栏),以便用户可随时使用该
程序。挂接菜单的代码如下:
Set MCBmenuCommandBar = AddToAddinCommandBar ("My Addin")
''sink the event
Set Me.MenuHandler=
VBinst.Events.CommandBarEvents (mcbMenuCommandBar)
其中AddToAddInCommandBar 函数的代码如下:
Function AddToAddInCommandBar (sCaption As String)As-Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl
Dim cbMenu As Object
On Error Go To AddToAddInCommandBarErr
''see if we can find the Add-ins menu
Set cbMenu=Vbinstance.CommandBars ("Add-ins")
If cbMenu is Nothing Then
''not available so we fail
Exit Function
End if
''add it to the command bar
Set cbMenuCommandBar=cbMenu.Controls.Add(1)
''set the caption
cbMenuCommandBar.Caption =sCaption
Set AddToAddInCommandBar = cbMenuCommandBar
Exit Function
AddToAddInCommandBarErr:
End Function
写上面的代码中,mcbMenuCommandBar变量定义为:
Dim mcbMenuCommandBar As Office.CommandBarControl
MenuHandler变量定义为:
Public WithEvents MenuHandler As CommandBarEvents
这里需要指出的是,MenuHandler是WithEvents变量,凡是WithEvents变量均表明该变量是一个用来响应由ActiveX对象触发的事件的对象变更。也就是说,该变量是拥有事件的,因此可以编写该变量的事件代码。在上述代码中将事件对象VBInst.Events.Comman-dBarEvents(mcbMenuCommandBar)赋予MenuHandler变量,则表示当发生有关mcbMenuC-ommandBar菜单项的事件时,由该变量的代码进行处理。在类模块中,我们发现,就存在MenuHandler-Click事件代码,该代码用以显示窗体对话。
在AddToAddInCommandBar函数中,VBInstance是在OnConnection方法保存的会话期实例,所有Add-Ins的调用都需要此实例。使用VBInstance. CommandBars(“Add-Ins”)将获得Add-Ins菜单条对象(在中文VB5下是“外接程序”菜单条),请注意:该“Add-Ins”是不会本地化的,因此无论是在中文还是英文VB5下抱歉获得上菜单条对象。代码Set cbMenuCommandBar=cbMenu.Controls.Add(1)在该菜单下添加一新