如果希望把 Web 浏览器作为容器应用程序,并创建了多个 ActiveX 文档,则必须使用 HyperLink 对象在不同文档之间移动。
Hyperlink 对象使文档能够访问 ActiveX 超链接功能。使用 Hyperlink 对象的属性和方法,ActiveX 文档可以申请一个识别超链接的容器,如 Microsoft Internet Explorer,来跳转到给定的 URL。
NavigateTo 方法执行超链接跳转到 URL 参数中指定的目标。URL 可以被设置为 HTML、Word、或 Excel 文档,也可以是 .vbd 文件。例如,下面的代码移动到 www.microsoft.com 的 Web 页:
Private Sub cmdGoTo_Click()
UserDocument.Hyperlink.NavigateTo _
"http://www.microsoft.com"
End Sub
从一个 ActiveX 文档跳转到另一个,可以使用相同的方法,如下所示。
Private GoNextDoc_Click() '假设下一个ActiveX文档名叫MyDoc2.vbdUserDocument.Hyperlink.NavigateTo _"file://c:\ActXDocs\MyDoc2.vbd"
编译有多个 ActiveX 文档的 ActiveX 工程时,Visual Basic 创建的 .vbd 文件与 ActiveX .dll 或 .exe 的目录相同,但是,如果把 .vbd 文件移到另一个路径中,则对每个 .vbd 文件,必须给 NavigateTo 方法一个完整的限定路径,由于不能确定用户把 .vbd 文件放置在何处,所以必须能动态地创建绝对路径。
LocationName 属性返回 Internet Explorer 当前显示文档的绝对路径,下面的代码从语法上分析 Internet Explorer 的 LocationName 属性,从而动态地构造 .vbd 文件的路径。代码对这个路径进行语法分析,并丢弃当前 .vbd 文件的名称。然后,代码把第二个 ActiveX 文档的名称追加到路径的剩余部分。
Dim strPath As String '将要进行语法分析的字符串Dim strAbsPath As String '分析结果Dim intI As Integer '字符位置计数器'返回当前ActiveX文档的路径。strPath = Trim$(UserDocument.Parent.LocationName)'找到最后一个分隔符字符的位置。For intI = Len(strPath) To 1 Step -1If Mid$(StrPath, intI, 1) = "/" Or _Mid$(StrPath, intI, 1) = "\" Then Exit ForNext intI'除去当前.vbd文件的名称。strAbsPath = Left$(StrPath, intI)'移动到第二个ActiveX文档。UserDocument.Hyperlink.NavigateTo _strAbsPath & "MyDoc2.vbd"
如果从支持 Hyperlink 对象的应用程序(如 Internet Explorer)所包含的 ActiveX 文档中调用 NavigateTo 方法,则将使用相同的应用程序实例来“走”到目标文档。如果应用程序不支持超链接(如 Microsoft Binder),那么将启动一个支持超链接(由注册表确定)的应用程序来处理该申请。换句话说,如果从不支持超链接的应用程序中调用该方法,则另一个支持超链接的应用程序将被启动。
NavigateTo 方法可用来从一个 ActiveX 文档跳转到另一个;事实上,它是在浏览器中启动另一个文档的唯一方法。因而,如果创建了一组 ActiveX 文档,而且目标容器应用程序是支持 Hyperlink 对象的浏览器,则必须使用 NavigateTo 方法来打开下一个文档。例如,当用户单击第一个文档上的 cmdGoNext 按钮时,下面的代码将使第二个(在组中)文档出现在 Internet Explorer 中:
Private Sub cmdGoNext_Click() '第二个ActiveX文档的文件名叫_' "ActiveDoc2.vbd"UserDocument.HyperLink.NavigateTo _"file://c:\ActiveX\ActiveDoc2.vbd"End Sub
NavigateTo 方法还包括第二个参数,FrameName 参数,指定文档要跳转到的特定帧。
GoBack 和 GoForward 方法执行向前或向后跳转到浏览器历史列表中的相邻文档。这些方法只在识别超链接的主机上使用(如 Internet Explorer 3.0 和更高的版本)。
实现 GoForward 或 GoBack 方法时,必须确保当历史列表中没有文档要跳转时进行错误检查。如下例:
Private Sub cmdGoForward_Click()
On Error GoTo noDocInHistory
UserDocument.Hyperlink.GoForward
Exit Sub
noDocInHistory:
Resume Next
End Sub