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

2008-02-23 06:49:23来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

---- 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(), 将

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Visual Basic COM基础之更多属性

下一篇:如何用VB设计动画时钟举例