HOWTO:通过编程向 FrontPage 中添加 COM 加载项

陈炜 02/18/2006
适用于 支持 Visual Basic 的 Windows 平台上的 Microsoft Office FrontPage

FrontPage 中不仅提供宏扩展,还提供 COM 加载项扩展,这使我们可以轻松的用外部开发工具为 FrontPage 开发组件。下面我们展示如何使用 Visual Basic 为 FrontPage 建立插件。
在建立 COM 加载项前,我们需要先了解连接事件和其它与 COM 加载项相关的信息:
OnConnection 此事件在插件被加载时发生,是第一个发生的事件。
OnConnection 有以下的参数:
Application - 指向于宿主程序的 Application 对象。
ConnectMode - 加载的方法,有以下几种方法:
  • ext_cm_AfterStartup - 被从 COM 加载项 对话框中加载。
  • ext_cm_CommandLine - 从命令行加载。
  • ext_cm_External - 被对象事件加载,如 CommandBarButton。
  • ext_cm_Startup - 在宿主程序启动时加载,受到注册表项的控制。
AddInInst - 将 COM 加载项加入到宿主程序的 COM 加载项的集合中。
Custom - 可以让用户自定义的数组。

OnDisconnection 此事件在插件被从内存中吊销前发生
OnDisconnection 有如下参数:
RemoveMode - 被吊销的方式,有如下几种:
  • ext_dm_HostShutdown - 发生在宿主程序被关闭时。
  • ext_dm_UserClosed - 被用户或被对象事件关闭。
Custom - 可以让用户自定义的数组。

OnAddInsUpdate 当插件的相关信息发生改变时发生。

OnStartupCompleteOnBeginShutdown
前者发生在宿主程序被完全启动后,后者发生在宿主程序即将关闭前。

COM 加载项注册表信息
通常情况下 COM 加载项的信息会被加载到宿主程序的相关注册表项目中来方便调用,如:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/FrontPage/Addins/ProgID
在这里不仅会包含加载项的名称及描述,还包括加载方法(LoadBehavior),它可以为如下几种数值:
• 0 = Disconnect - 不加载。
• 1 = Connected - 被加载。
• 2 = Bootload - 宿主程序启动时加载。
• 8 = DemandLoad - 需要时加载。
• 16 = ConnectFirstTime - 只在下次运行时加载一次。

当我们在 Visual Basic 中通过新建 外接程序 来建立插件后,在设计器 Connect 中就已经有了连接事件,而我们只需要将默认的 Visual Basic 外接程序的连接代码删除就可以了。
示例代码(建立一个简单的网络英中词典):

Option Explicit
Dim aCommandBar As Office.CommandBars
Dim bCommandBar As Office.CommandBar
'使用 WithEvents 来声明带有事件的变量
Dim WithEvents objBtn As Office.CommandBarButton
Dim applicationObject As Object
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
   On Error Resume Next
   Set applicationObject = Application
   Set aCommandBar = applicationObject.CommandBars
   '指定变量为 常用 工具栏
   Set bCommandBar = aCommandBar.Item("Standard")
   '查找已有的按钮:
   '如果有则使用现有
   '如果不存在则返回空值
   '如果没有 On Error Resume Next 语句则返回错误
   Set objBtn = bCommandBar.Controls.Item("翻译")
   '如果按钮不存在则创建一个新的按钮
   If objBtn Is Nothing Then Set objBtn = bCommandBar.Controls.Add(1)
   With objBtn
     .Caption = "翻译"
     .Style = msoButtonCaption
    
'不是必需的,但如用户在按钮存在而插件未加载时点击按钮,它可以加载已注册插件
     .OnAction = "!<JmouseTranslate.Connect>"
     .Visible =
True
   End With
   Set aCommandBar =
Nothing
   Set bCommandBar =
Nothing
End Sub

Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
   On Error Resume Next
   '删除按钮
   objBtn.Delete
   objBtn = Nothing
   applicationObject = Nothing
End Sub

Private Sub objBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  
On Error Resume Next
   Dim
objDoc
As Object
   Dim objRange
As Object
   Set
objRange = applicationObject.ActiveDocument.Selection.createRange
   If Trim$(objRange.Text) <> "" Then
     ShellExecute 0, "open", Replace("http://www.dreye.com.cn:8080/axis/ddict.jsp?w=%jmouse%&ver=gb&type=0", "%jmouse%", Trim$(objRange.Text)), "", "", 0
   Else
     MsgBox "没有选定任何文本。", vbApplicationModal + vbInformation, "翻译"
   End If
End Sub

至此我们的工作已经完成。本文主要介绍的是通过编程向 FrontPage 添加 COM 加载项的方法,而对于实例来说,写成内置宏代码会更加简便。
(通过 http://jmouse.vip.sina.com/dlls/JT_DL.exe 可以下载该加载项)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值