VB 插件 使用开发_第1页
VB 插件 使用开发_第2页
VB 插件 使用开发_第3页
VB 插件 使用开发_第4页
VB 插件 使用开发_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要:本文通过实例介绍如何开发一个 VB 的插件来扩展 VB 的应用。包括如何实现插件与 VB开发环境的连接,控制VB开发环境,以及简要介绍插件对象的结构。文章内容一、插件介绍从结构上来看,一个VB插件实际上是一个COM组件,原则上组件可以使用支持COM 的开发工具,例如Delphi、VC来编写。组件通过实现COM中的IDTExtensibility对象来 建立与VB的连接。组件注册以后,当VB运行中在Add-In菜单中装载组件后,VB就会调 用组件中IDTExtensibility对象中的相应方法(如在装载组件后会调用OnConnection方法)。 这时整个插件就成为VB的一部分从而可以访

2、问VB开发环境中的各种对象和资源了。利用VB本身来编写插件是一个很好的办法,首先通过VB可以快速建立一个 IDTExtensibility对象框架(当然在VB中不叫这个名称);其次VB对于整个开发环境都提 供了相应的对象供插件访问和控制,而使用插件的主要目的就是通过插件来控制宿主程序; 最后是调试十分的方便,可以直接运行看结果,不需要编译注册。二、建立程序框架首先我们来建立程序框架,以下的代码和说明都是使用Win2K VB6中文企业版完成的, 在VB英文版以及Win9X下运行通过只是程序中对于界面的说明根据不同的VB会有不同。打开VB,点击菜单中的文件|新建 项,在 新建工程 窗口中选择外接程

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

4、击外接程序 菜单,再点击其中新添加的 My AddIn 项。可以看到插件弹出一个窗 体,点击确定按钮可以获得VB运行的目录,点击取消按钮关闭窗体。接下来再次打开外接程序管理器窗口。选中 My Add-In 项,将 加载行为 区域中的三个 复选框中的对勾去掉。然后回到运行插件的VB程序,点击停止按钮停止插件的执行。回到插件工程中,我们主要来看 Connect 对象,打开 Connect 对象的代码窗口。可以看 到其中包含两个对象:Addininstance和MenuHandler。其中Addinstance是工程中实现 同 VB 接口的对象。在程序中对应 AddInstance 包含两个方法:

5、OnConnection 和 OnDisconnection。在这里我们称它们为方法而不是事件,是因为它们是由VB调用而不是由 某个消息引发而由系统调用的。OnConnection方法在插件装载使被调用,其中的参数Application是调用插件的VB实 例对象。这个对象是一个VBE类对象。由VB传递给插件插件就可以通过Application对象 访问和控制调用自己的VB实例。其中比较重要的是这一段:if ConnectMode = ext_cm_External ThenMe.ShowElseSet mcbMenuCommandBar = AddToAddinCommandBar(Addin

6、Sample)Set Me.MenuHandler = VBinstance. Events. CommandBarEvents (mcbMenuCommandBar)End if在上面的程序段中,首先通过ConnectMode来判断插件被装载的方式,如果是不是通过外部 程序启动的话,首先调用AddToAddInCommandBar方法添加一个菜单项到外接程序菜单 栏。添加了菜单项后,插件程序还必须能够响应对菜单的点击做响应,VB支持插件对自身的很多 事件监控,包括点击菜单、工具栏按钮、打开工程、添加/删除工程中的文件等等。 对应每一 种事件,VB实例都包含有一个相应的事件对象。对象可以通过V

7、B实例对象的Events属性 获得或者设置。在插件程序中可以事先定义一个事件对象并编写好对象的事件响应代码,然 后将该对象赋予VB实例对象中的相应事件对象。在上面的程序中,需要插件监控对添加的菜 单项的点击事件,那么首先在程序中首先定义了一个With Events的对象MenuHandler。 并在程序中编写对象的 Click 事件代码,然后在 OnConnection 方法中用Set Me.MenuHandler =VBinstance.Events.CommandBarEvents(mcbMenuCommandBar)将MenuHandler设定为建立的菜单对象的事件对象,那么当在VB中点

8、击My Add-In项后, VB就会调用MenuHandle的Click事件代码。三、完善程序从上面的分析可以得知,程序框架实现了 VB与插件间的接口和插件监控VB事件。接下来要 实现插件对VB的控制在VB调用插件对象的OnConnection方法时,会将自身作为一个VBE对象传递给插件供访 问及操作。VBE对象是VB实例的根对象,其下包含以下5类基本的对象集合:VBProjects集合:通过该集合可以访问VB实例中所包含的工程。Windows集合:通过该集合可以访问所有的窗口,包括控件栏、属性栏以及工程中的窗体等。CodePanes集合:通过该集合可以访问所有的代码窗口。可以获得代码窗口中的

9、代码以及改 变其中的代码。CommandBars集合:通过该集合可以访问VB实例中的所有命令栏,包括支持快速菜单的 命令栏。Events集合:通过该集合插件可以访问VB中的所有事件对象。下面的程序我们要实现的是:当点击My-Addin菜单时,在当前工程中添加一个模块并在其 中添加一个子程序,并让用户选择在工程中的窗体中选择一个窗体添加一个CommandButton 控件,并向窗体的代码窗口写入代码使得点击 CommmandButton 控件就 执行添加的子程序。打开工程中的frmAddln窗体,在其中添加一个CommandBu tt on控件和一个Lis tBox控件。在 frmAddIn 的

10、 Load 事件中添加如下代码:Dim mCop As Object 获得当前启动工程中的所有对象For Each mCop In VBInstance.VBProjects.StartProject.VBComponents如果对象是窗体类型就将其添加到ListBox中If mCop.Type = vbext_ct_VBForm ThenList1.AddItem mCop.NameEnd IfNextIf List1.ListCount 1 ThenMsgBox 工程中没有添加控件的窗体Connect.HideElseList1.ListIndex = 0End IfCommand1.Ca

11、ption = Add Code在 Command1 的 Click 事件中添加如下代码:Dim xComp As VBComponentDim xModule As VBComponentDim xForm As VBFormDim xControl As VBControlDim xCode As CodeModule获得用户选择的窗体对象Set xComp =VBInstance.VBProjects.StartProject.VBComponents(List1.List(List1.ListIndex) 获得窗体设计器对象Set xForm = xComp.Designer添加一个

12、CommandButton 到窗体上Set xControl = xForm.VBControls.Add(VB.CommandButton) 设定控件的名称xControl.Properties(Name) = cmdButton添加控件的Click事件代码xComp.CodeModule.CreateEventProc Click, cmdButton 添加一个新模块到工程中Set xModule =VBInstance.VBProjects.StartProject.VBComponents.Add(vbext_ct_StdModule)设定模块名称xModule.Properties(

13、Name) = ModulTemp获得对象的代码对象Set xCode = xModule.CodeModuleDim astr As String添加mClick子程序到新模块中astr = Public Sub mClick() Chr(13) Chr(10) _Chr(vbKeyTab) MsgBox You click a button! Chr(13) Chr(10) _ End SubxCode.AddFromString astrDim lCount As Long在 cmdButton 的 Click 事件中添加执行 mClick 子程序lCount = xComp.CodeModule.ProcBodyLine(cmdButton_Click, vbext_pk_Proc)If lCount 0 ThenxComp.CodeModule.InsertLines lCount 1, mClickEnd If运行程序,再次打开另一个VB程序建立一个标准Exe工程。并装载My Addin插件, 点击菜单的My Addin项,然后在弹出窗口中选择工程中的一个窗体,然后点击Add Code 按钮

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论