和 ActiveX 文档一起使用 HyperLink 对象

如果希望把 Web 浏览器作为容器应用程序,并创建了多个 ActiveX 文档,则必须使用 HyperLink 对象在不同文档之间移动。

Hyperlink 对象使文档能够访问 ActiveX 超链接功能。使用 Hyperlink 对象的属性和方法,ActiveX 文档可以申请一个识别超链接的容器,如 Microsoft Internet Explorer,来跳转到给定的 URL。

NavigateTo 方法

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.vbd
      UserDocument.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 -1
   If Mid$(StrPath, intI, 1) = "/" Or _
      Mid$(StrPath, intI, 1) = "\" Then Exit For
Next intI

'除去当前 .vbd 文件的名称。
strAbsPath = Left$(StrPath, intI)

'移动到第二个 ActiveX 文档。
UserDocument.Hyperlink.NavigateTo _
   strAbsPath & "MyDoc2.vbd"

自动启动浏览器

如果从支持 Hyperlink 对象的应用程序(如 Internet Explorer)所包含的 ActiveX 文档中调用 NavigateTo 方法,则将使用相同的应用程序实例来“走”到目标文档。如果应用程序不支持超链接(如 Microsoft Binder),那么将启动一个支持超链接(由注册表确定)的应用程序来处理该申请。换句话说,如果从不支持超链接的应用程序中调用该方法,则另一个支持超链接的应用程序将被启动。

在 ActiveX 文档之间移动

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 方法

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