ActiveX 文档和 ActiveX 控件一样,不能单独使用。ActiveX 文档必须存在于容器中,容器自己也是一个对象。然而,大多数 ActiveX 文档将在应用程序中查看,且该应用程序提供了一个对象,该对象是 ActiveX 文档的实际容器。在该文档中,称这些应用程序为容器应用程序、或可以包含 ActiveX 文档的应用程序。
下面是三种容器及它们的优点:
注意 根据您所使用的 Internet Explorer 版本的不同,ActiveX 文档的发布稍有不同。有关部署 ActiveX 文档的详细信息,请参阅“Building Internet Applications”中的“Manually Deploying ActiveX Components”。
因为 ActiveX 文档的性能会依赖于主机应用程序,所以应当考虑下列问题:
例如,创建将在 Internet Explorer 中运行的 ActiveX 文档,则可能希望利用其能力在一帧中显示 ActiveX 文档,而在另一帧中显示 HTML 文档。
例如,如果文档是简单计算器,则它可能不需要多个 ActiveX 文档,则答案是“否”。
如果有一个答案是“是”,则需要研究目标应用程序的性能。特别是需要知道如何从一个 ActiveX 文档移动到另一个 ActiveX 文档(如果创建一组文档),或怎样访问主机应用程序的特性。找到对象模型的唯一方法是使用对象浏览器,而不在容器应用程序的创建者的文档描述中。
为了说明这种情况,请检查多文档的情形。假设创建了两个 ActiveX 文档,并希望通过单击第一个文档的按钮来打开第二个文档。
如果主机应用程序是 Internet Explorer,则必须使用 Hyperlink 对象的 NavigateTo 方法从一个文档到另一个文档,如下面的代码:
Private Sub cmdGoTo_Click() '
假定目标名为AxDoc2.vbd
。UserDocument.HyperLink.NavigateTo _
"file://c:\docs\AxDoc2.vbd"
End Sub
另一方面,Microsoft Binder 以完全不同的隐语来操作。必须添加段到 Binder 中,而不是移动到另一个文档。下面给出了代码示例:
Private Sub cmdAddSection_Click() '
使用相同的文档:AxDoc2
。UserDocument.Parent.Parent.Sections. _
Add , "c:\docs\AxDoc2.vbd"
End Sub
从前面两个不同方法可以看出,显然,在每个容器中,都不能指望通过一个方法实现从一个 ActiveX 文档到另一个 ActiveX 文档。然后,问题变为,“怎样为目标主机应用程序查找方法?”
查找应用程序的方法的一种途径(除文档描述外)是使用对象浏览器。例如,要找出 Microsoft Binder 的对象模型,需采取以下步骤:
要查找 Microsoft Binder 的对象和方法,,请按照以下步骤执行:
注意 必须有 Microsoft Office Binder 1.0 或更高的版本,可以和 Microsoft Office 一起安装。
可能已经注意到,对象浏览器未对对象模型提供完整指导。把代码:
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 程序员指南》的“用对象编程”中的“移动对象模型”。