以 ActiveX 文档容器为目标

ActiveX 文档和 ActiveX 控件一样,不能单独使用。ActiveX 文档必须存在于容器中,容器自己也是一个对象。然而,大多数 ActiveX 文档将在应用程序中查看,且该应用程序提供了一个对象,该对象是 ActiveX 文档的实际容器。在该文档中,称这些应用程序为容器应用程序、或可以包含 ActiveX 文档的应用程序。

下面是三种容器及它们的优点:

容器的问题

因为 ActiveX 文档的性能会依赖于主机应用程序,所以应当考虑下列问题:

如果有一个答案是“是”,则需要研究目标应用程序的性能。特别是需要知道如何从一个 ActiveX 文档移动到另一个 ActiveX 文档(如果创建一组文档),或怎样访问主机应用程序的特性。找到对象模型的唯一方法是使用对象浏览器,而不在容器应用程序的创建者的文档描述中。

示例:一个目标,两个容器

为了说明这种情况,请检查多文档的情形。假设创建了两个 ActiveX 文档,并希望通过单击第一个文档的按钮来打开第二个文档。

如果主机应用程序是 Internet Explorer,则必须使用 Hyperlink 对象的 NavigateTo 方法从一个文档到另一个文档,如下面的代码:

Private Sub cmdGoTo_Click()
   '假定目标名为 AxDoc2.vbdUserDocument.HyperLink.NavigateTo _
      "file://c:\docs\AxDoc2.vbd"
End Sub

另一方面,Microsoft Binder 以完全不同的隐语来操作。必须添加段到 Binder 中,而不是移动到另一个文档。下面给出了代码示例:

Private Sub cmdAddSection_Click()
   '使用相同的文档:AxDoc2UserDocument.Parent.Parent.Sections. _
      Add , "c:\docs\AxDoc2.vbd"
End Sub

研究目标应用程序的对象模型

从前面两个不同方法可以看出,显然,在每个容器中,都不能指望通过一个方法实现从一个 ActiveX 文档到另一个 ActiveX 文档。然后,问题变为,“怎样为目标主机应用程序查找方法?”

查找应用程序的方法的一种途径(除文档描述外)是使用对象浏览器。例如,要找出 Microsoft Binder 的对象模型,需采取以下步骤:

要查找 Microsoft Binder 的对象和方法,,请按照以下步骤执行:

注意 必须有 Microsoft Office Binder 1.0 或更高的版本,可以和 Microsoft Office 一起安装。

  1. 单击“工程”菜单的“引用”。

  2. 在可用的引用滚动列表中,单击“OLE Automation Binder 1.0 Type Library”(或 Microsoft Binder 8.0 Object Library for Office ’97)。

  3. 单击“确定”。

  4. 按 F2 键打开“对象浏览器”。

  5. 单击“工程/库”框,然后单击“Office Binder”。

  6. 再类列表中,单击“稿件”。

  7. 在列表成员中,单击“添加”。此时可看到 Add 方法的语法,可用它来添加 ActiveX 文档到 Sections 集合中。

在对象模型中间移动

可能已经注意到,对象浏览器未对对象模型提供完整指导。把代码:

UserDocument.Parent.Parent.Sections.Add _
, "c:\docs\AxDoc2.vbd"

与对象浏览器找到的信息比较。差别在于代码中加入了 “UserDocument.Parent.Parent”。

差异的产生,是因为 ActiveX 文档自己“隐藏”在对象模型的底部。对于 Office Binder,ActiveX 文档只是 Sections 集合中的一个 Section 对象。因而,代码 TypeName(UserDocument.Parent) 返回的是 "Section",而 TypeName(UserDocument.Parent.Parent) 返回的则是 "Binder"。

为了在分层结构中移动到对象模式的顶部,代码使用 Parent 属性返回的引用。但是,代码必须移动到最后级─ 再次使用 Parent 属性。结果导致 Parent.Parent 形式的代码。代码回溯到 Sections 集合,最后到达 Add 方法。

详细信息 要了解“对象浏览器”,请参阅《Visual Basic 程序员指南》的“用对象编程”中的“找出有关对象的信息”。关于在对象模型中移动的详细信息,请参阅《Visual Basic 程序员指南》的“用对象编程”中的“移动对象模型”。