vb插件:使用插件功能扩展VB

  、插件介绍

  从结构上来看个VB插件实际上是个COM组件原则上组件可以使用支持COM开发工具例如Delphi、VC来编写组件通过实现COM中IDTExtensibility对象来建立和VB连接组件注册以后当VB运行中在Add-In菜单中装载组件后VB就会组件中IDTExtensibility对象中相应思路方法(如在装载组件后会OnConnection思路方法)这时整个插件就成为VB部分从而可以访问VB开发环境中各种对象和资源了

  利用VB本身来编写插件是个很好办法首先通过VB可以快速建立个IDTExtensibility对象框架(当然在VB中不叫这个名称);其次VB对于整个开发环境都提供了相应对象供插件访问和控制而使用插件主要目就是通过插件来控制宿主;最后是调试十分方便可以直接运行看结果不需要编译注册

   2、建立框架

  首先我们来建立框架以下代码和介绍说明都是使用Win2K+VB6中文企业版完成在VB英文版以及Win9X下运行通过只是中对于界面介绍说明根据区别VB会有区别

  打开VB点击菜单中文件|新建项在 新建工程 窗口中选择“外接” 项(在英文版中是Addin)然后点击确定按钮建立插件工程

  建立完毕后在工程列表窗口中可以看到新工程名称为MyAddIn其中包含两个对象在窗体类中包含frmAddIn窗体在设计器类中包含Connect设计器对象VB已经为插件设立了个基本框架下面按F5运行插件并将VB主窗口最小化然后再打开个VB在其中建立个标准 Exe工程点击菜单 外接 | 外接管理器 项在打开外接管理器窗口列表中可以看到其中有个My Add-In 项点击该项然后将下面 加载行为(英文版中是Load Behavior) 区域中 3个复选框都选中后点击确定按钮装载插件然后再点击“外接” 菜单再点击其中新添加 My AddIn 项可以看到插件弹出个窗体点击“确定”按钮可以获得VB运行目录点击“取消”按钮关闭窗体

  接下来再次打开外接管理器窗口选中 My Add-In项将 加载行为 区域中 3个复选框中对勾去掉然后回到运行插件VB点击停止按钮停止插件执行

  回到插件工程中我们主要来看Connect对象打开Connect对象代码窗口可以看到其中包含两个对象:AddinInstance和MenuHandler其中AddInstance是工程中实现同VB接口对象中对应AddInstance包含两个思路方法:OnConnection和OnDisconnection在这里我们称它们为思路方法而不是事件它们是由VB而不是由某个消息引发而由系统

  OnConnection思路方法在插件装载使被其中参数Application是插件VB例子对象这个对象是个VBE类对象由VB传递给插件插件就可以通过Application对象访问和控制自己VB例子其中比较重要是这段:

  If ConnectMode = ext_cm_External Then
Me.Show
Else
Set mcbMenuCommandBar = AddToAddInCommandBar("AddInSample")
Set Me.MenuHandler = VBInstance. Events. CommandBarEvents (mcbMenuCommandBar)
End If
  在上面段中首先通过ConnectMode来判断插件被装载方式如果是不是通过外部启动首先AddToAddInCommandBar思路方法添加个菜单项到 外接 菜单栏

  添加了菜单项后插件还必须能够响应对菜单点击做响应VB支持插件对自身很多事件监控包括点击菜单、工具栏按钮、打开工程、添加/删除工程中文件等等对应每种事件VB例子都包含有个相应事件对象对象可以通过VB例子对象Events属性获得或者设置在插件中可以事先定义个事件对象并编写好对象事件响应代码然后将该对象赋予VB例子对象中相应事件对象在上面需要插件监控对添加菜单项点击事件那么首先在中首先定义了个With Events对象MenuHandler并在中编写对象Click事件代码然后在OnConnection思路方法中用

  Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar)

  将MenuHandler设定为建立菜单对象事件对象那么当在VB中点击 My Add-In项后VB就会MenuHandleClick事件代码

   3、完善

  从上面分析可以得知框架实现了VB和插件间接口和插件监控VB事件接下来要实现插件对VB控制

  在VB插件对象OnConnection思路方法时会将自身作为个VBE对象传递给插件供访问及操作VBE对象是VB例子根对象其下包含以下5类基本对象集合:

  VBProjects集合:通过该集合可以访问VB例子中所包含工程

  Windows集合:通过该集合可以访问所有窗口包括Control控件栏、属性栏以及工程中窗体等

  CodePanes集合:通过该集合可以访问所有代码窗口可以获得代码窗口中代码以及改变其中代码

  CommandBars 集合:通过该集合可以访问VB例子中所有命令栏包括支持快速菜单命令栏

  Events 集合:通过该集合插件可以访问VB中所有事件对象

  下面我们要实现是:当点击 My-Addin菜单时在当前工程中添加个模块并在其中添加个子并让用户选择在工程中窗体中选择个窗体添加个CommandButtonControl控件并向窗体代码窗口写入代码使得点击CommmandButtonControl控件就执行添加

  打开工程中frmAddIn窗体在其中添加个CommandButtonControl控件和个ListBoxControl控件

  在frmAddInLoad事件中添加如下代码:

  Dim mCop As Object
'获得当前启动工程中所有对象
For Each mCop In VBInstance.VBProjects.StartProject.VBComponents
'如果对象是窗体类型就将其添加到ListBox中
If mCop.Type = vbext_ct_VBForm Then
List1.AddItem mCop.Name
End If
Next
If List1.ListCount < 1 Then
MsgBox "工程中没有添加Control控件窗体"
Connect.Hide
Else
List1.ListIndex = 0
End If
Command1.Caption = "Add Code"
在Command1Click事件中添加如下代码:
Dim xComp As VBComponent
Dim xModule As VBComponent
Dim xForm As VBForm
Dim xControl As VBControl
Dim xCode As CodeModule
'获得用户选择窗体对象
Set xComp = VBInstance.VBProjects.StartProject.VBComponents(List1.List(List1.ListIndex))
'获得窗体设计器对象
Set xForm = xComp.Designer
'添加个CommandButton到窗体上
Set xControl = xForm.VBControls.Add("VB.CommandButton")
'设定Control控件名称
xControl.Properties("Name") = "cmdButton"
'添加Control控件Click事件代码
xComp.CodeModule.CreateEventProc "Click", "cmdButton"
'添加个新模块到工程中
Set xModule = VBInstance.VBProjects.StartProject.VBComponents.Add(vbext_ct_StdModule)
'设定模块名称
xModule.Properties("Name") = "ModulTemp"
'获得对象代码对象
Set xCode = xModule.CodeModule
Dim astr As String
'添加mClick子到新模块中
astr = "Public Sub mClick" + Chr(13) + Chr(10) + _
Chr(vbKeyTab) + "MsgBox ""You click a button!""" + Chr(13) + Chr(10) + _
"End Sub"
xCode.AddFromString astr
Dim lCount As Long
'在cmdButtonClick事件中添加执行mClick子
lCount = xComp.CodeModule.ProcBodyLine("cmdButton_Click", vbext_pk_Proc)
If lCount <> 0 Then
xComp.CodeModule.InsertLines lCount + 1, "mClick"
End If




  运行再次打开另个VB建立个标准Exe工程并装载 My AddIn插件点击菜单 My AddIn项然后在弹出窗口中选择工程中个窗体然后点击 Add Code 按钮可以看到工程中新添加了个ModuleTemp模块并且你选择窗体中添加了个CommandButton按钮通过前面介绍以及上面代码注释相信大家对于插件如何通过VBE对象控制VB可能有个比较基本了解了

  上面只是基本介绍了VB插件实现通过完善可以形成个功能齐全插件例如你可以将所积累很多年代码保存到个文件中然后通过个插件让用户可以方便选择添加他们所需要部分到自己

  上面就是文章全内容如果大家在编程方面有什么问题欢迎到我站点bbs.ddvip.com上同我起探讨



Tags:  wow插件使用 如何使用插件 vb插件

延伸阅读

最新评论

发表评论