计算机世界日报
返回首页 产品报价 实用技巧 国产软件 技术天地 站点精选

计算机世界展览会日报

  综合要闻
  企业&人.com
  产品与技术
  网络与通信
  市场与渠道
  99全文检索

CCW网站

  网络世界
  微电脑世界
  IT经理世界
  CCW展览
  信息服务中心   家用电脑世界

兄弟刊物

  电子与信息化
  今日电子
  中国新闻科技
  电子知识产权
  电子产品世界

网上专递

  Linux园地
  友情链接
  冬涛谈法
Dongtao on Law

98内容总汇



实用技巧

使 用ADD-IN 技 术 加 强Visual Basic 开 发 环 境

西 安 奥 林 岛 公 司 张 吉 龙

---- Visual Basic 5.0 是 一 个 功 能 强 大 的 集 成 开 发 环 境, 它 可 以 自 动 检 查 语 法 错 误, 提 示 编 码 员 语 法 格 式。 这 些 功 能 都 大 大 提 高 了 编 码 效 率。 可 是 它 作 为 快 捷 开 发 工 具, 它 的 特 点 还 突 出 体 现 在 那 就 是Add-In 技 术 上。 利 用 它, 我 们 可 以 强 化 和 定 制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。 将Project 名 称 改 为 你 希 望 的 名 字, 如"Test"。

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

Sub AddToINI()
    Dim ErrCode As Long
ErrCode = WritePrivateProfileString("Add-Ins32", 
"Myaddin.Connect", "0", "vbaddin.ini")
End Sub

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

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

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

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

---- Debug.Print VBInst.FullName

---- 运 行 当 前 程 序。

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

---- Debug.Print VBInst.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 的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 integer", 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" 字 样, 而 是 具 有 更 明 确 含 义 的 标 识, 如" 替 换"。 改 动Test 的Connect Class----IDTExtensibility_OnConnection(), 将

  		Set mcbMenuCommandBar 
= AddToAddInCommandBar("My AddIn")
	改为
		Set mcbMenuCommandBar 
= AddToAddInCommandBar("替换")
如果你想将Addin Manager中的My Addin改为
 "Replace",可用notepad打开Connect.cls,将:
	Attribute VB_Description = "My Add-In"
	改为:
	Attribute VB_Description = "Replace"

---- 以 上 介 绍 地 只 是AddIn 技 术 的 一 个 简 单 应 用, 了 解 其 机 理 后, 大 家 可 根 据 需 要 做 出 自 己 的 工 具。 对 于 一 些 专 业 的 应 用 软 件 开 发 商 来 说, 积 累 越 多 的AddIn 工 具, 便 可 以 大 大 提 高 编 码 效 率。

 
免 费 订 阅

实用技巧分类

Office应用
CAD
C、C++
数据库应用
Delphi
Internet应用
Java
Notes应用
操作系统应用
PowerBuilder
VB
Visual Foxpro
其他类
上周 排行榜
如 何 投 稿 ?

编者的话

在日常的工作生活中, 我们对计算机软硬件技术的应用开发肯定有许多的心得体会, 拿来和众人分享:让别人得到他们想要的,使自己找到苦苦寻觅的; 小的点点滴滴,大的工程系统,这里都需要。投稿 的关键在“技巧”二 字,知他人所不知,这样的稿件本栏最最欢迎! 大家公认的 好文章自然会有好的奖励。希望每个人 在这里都有所收获...

r2.gif (980 bytes)
  中国惠普
  3Com中国
  Motorola中国
  CA中国
  Cabletron
  Sony在中国
  西门子WinCC
  爱普生中国
  中国建设银行
  德州仪器(TI)
  问博医药


中国计算机世界出版服务公司版权所有