向 HTA 添加简单工具栏
如果说使用 HTML 应用程序时有局限性的话(很遗憾,使用 HTA 时有局限性),其原因是:因为 HTA 主要依靠 HTML 控件,不存在向应用程序添加菜单栏或工具栏的简便方法。因此,您通常只好在屏幕上放置一组有标题而没有图像的按钮。尽管这种方法明显不够酷,但确实能够起作用。(但对于脚本专家来说,酷就是一切。)
当然,确实有允许您向 HTA 添加菜单栏和/或工具栏的 ActiveX 控件。其中一些控件实际上很不错,但同时也可能有点复杂。老实说,对于脚本专家,有一件要胜过酷的事情是:懒惰。因此,我们想应该向您展示一种非常简单的方法来使用命令按钮 ActiveX 控件建立工具栏,该控件作为 Microsoft Office 的一部分安装。(换句话说,只要您有 Microsoft Office,就有了该控件。)它可能并不是世界上最特别的工具栏,但总比 HTML 中普通的老式 <button> 标记好得多。以下是那种稍稍费力就可组合成的工具栏的示例:
看到了吗?看起来不错,想到这些是真正的按钮而不仅仅是图形时尤其如此。您可以很容易地画一个与此类似的工具栏并将图形载入 HTA;但有人单击它们时,这些图形并不会像真正的按钮一样起作用。但这里不会出现这个问题,原因很简单:这些是真实有效的按钮。我们只不过将它们缩小了一点并用图片取代了按钮标题。
使用 Microsoft Office 命令按钮控件
让我们来看一下一个精简的示例,即仅使用一个按钮工具栏的示例:
<html>
<head>
<title>Toolbar Example</title>
</head>
<Script Language="VBScript">
Sub Window_Onload
CommandButton1.Width = 32
CommandButton1.Height = 32
CommandButton1.Picture = LoadPicture("c:\scripts\network.bmp")
End Sub
Sub CommandButton1_Click()
DataArea.InnerHTML = "You clicked button 1."
End Sub
</Script>
<body topmargin="0" rightmargin="0" leftmargin="0">
<table width="100%" border="1" width="100%" bordercolorlight="buttonface"
bordercolordark="buttonface" style="border-collapse:collapse">
<tr>
<td width="100%" bgcolor="buttonface">
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"></object>
</td>
</tr>
<table>
<p> <p>
<blockquote>
<span id=DataArea></span>
</blockquote>
</body>
</html>
此 HTA 主要包含两个元素:一个放置命令按钮的表格,和一个 <span>,它用于在单击该按钮时显示信息。我们还要指出,我们将 HTA 左侧、右侧和顶端的边距已配置为“0”。这将确保我们的表格(进而我们的工具栏)沿 HTA 窗口的左上边缘紧密接合,并将确保表行一路延伸到最右侧边缘。
首先检查表格,我们使用下面这行代码来举例说明:
<table width="100%" border="1" width="100%" bordercolorlight="buttonface"
bordercolordark="buttonface" style="border-collapse:collapse">
在这里您不必过多担心 HTML 标记;如果想了解有关各个参数的更多信息,请参阅 HTML 和 DHTML 参考(英文)。实质上我们创建了一个跨越整个 HTA 窗口宽度的表格。我们配置了一个像素的边框环绕整个表格(将由一行和一个单元格组成的表格),然后将边框的颜色设置为 buttonface,即要用于表格单元格的同一种颜色。我们这样做完全是出于美观原因:这样生成的工具栏周围没有任何种类的轮廓线。
然后我们使用下列两行代码来创建一个表格行和一个表格单元格(如我们所说,使用 buttonface 作为其背景色):
<tr>
<td width="100%" bgcolor="buttonface">
现在,我们终于进入了实质阶段:插入命令按钮。要完成此任务,我们只需添加一个 <object> 标记:
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"></object>
正如您所见,我们的 object 标记只需要两个参数:classid 和 id。classid 是一个全局唯一标识符,告诉操作系统要插入哪个 ActiveX 控件。当然,classid 也是一个不可能记住和几乎不可能键入的值。但是没关系,为省去这些麻烦,我们为命令按钮实例分配一个 id(绰号)。当我们要在脚本中引用该按钮时,可以使用 id (CommandButton1) 而不是 classid (D7053240-CE69-11CD-A777-00DD01143C57)。
对于表格就是这样。我们插入一个名为 DataArea 的 <span>,如名称所暗示的那样,我们将在其中写入数据(虽然在本示例脚本中我们很随便地使用术语“数据”)。就这样,我们完成了 HTA 的正文部分。
如此便还剩下两个子例程需要我们完成。第一个子例程是 Windows_Onload,无论何时加载或刷新 HTA 它都将自动运行。在该子例程中,我们配置命令按钮的属性值:
CommandButton1.Width = 32
CommandButton1.Height = 32
CommandButton1.Picture = LoadPicture("c:\scripts\network.bmp")
从我们的角度来看,有趣的一个属性值是最后那一个:其中我们使用 LoadPicture 方法为按钮分配了一张图片。我们所做的就是调用 LoadPicture 并向其传递一个参数:图像文件的完整路径。Width 和 Height 属性被配置成以点为单位,每点约为 1/72 英寸。将两者都设置为 32 可得到大小适中的按钮;但您可能需要根据最终使用的图片大小来调整其中的任意一个值。
注意:还有其他命令按钮属性可能让您感兴趣吗?也许会有;请查看 Microsoft Forms 帮助文件 (FM20.chm) 获取相关信息。安装 Office 时,该文件可能已经复制到 C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\1033 文件夹下。如果没有,您可从 Office CD 上获取该文件。
|
我们的第二个子例程只不过是在用户单击命令按钮时执行的代码而已:
Sub CommandButton1_Click()
DataArea.InnerHTML = "You clicked button 1."
End Sub
正如您所见,我们在这里没有做任何特别的事情:我们只是将按钮被单击的事实写入 DataArea 的 InnerHTML 属性。需要指出的一件有趣的事情是,我们不必在 <object> 标记中的任何位置指定 onclick 参数。默认情况下,任何时候单击按钮时,HTA 将会自动搜索以该按钮命名的 Click 子例程。
以下就是我们光彩夺目的单按钮工具栏:
抱歉:禁止用闪光灯拍照。
当然,您可能已想到了如何创建多按钮工具栏:您仅需要插入命令按钮 ActiveX 控件的其他实例(确保赋予每个实例唯一的 id,并确保在 Window_Onload 子例程中配置按钮属性)。另外,您需要创建单独的子例程,以便在单击特定按钮时运行。例如,为插入第二个按钮,您必须添加以下 object 标记:
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton2"></object>
然后需要将以下代码行插入到 Window_Onload 子例程中:
CommandButton2.Width = 32
CommandButton2.Height = 32
CommandButton2.Picture = LoadPicture("c:\scripts\cd.bmp")
最后,您需要创建在每次单击 CommandButton2 时运行的子例程:
Sub CommandButton2_Click()
DataArea.InnerHTML = "You clicked button 2."
End Sub
非常简单。
如果您想在这方面稍做尝试,但不想进行所有的键入工作,我们在这里提供了有四个按钮的工具栏 HTA 示例,供您进行复制和粘贴。请注意,我们在此脚本中额外添加了一个效果:我们使用了 title 标记为每个按钮添加一条工具提示:
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"
title="Get network connections information."></object>
现在,每次您将鼠标置于 CommandButton1 之上时,将显示工具提示“Get network connections information”。如果这还不能使您成为这方面最酷的脚本编写者,那么我们不知道什么才会。
如下便是该 HTA 代码:
<html>
<head>
<title>Toolbar Example</title>
</head>
<Script Language="VBScript">
Sub Window_Onload
CommandButton1.Width = 32
CommandButton1.Height = 32
CommandButton1.Picture = LoadPicture("c:\scripts\network.bmp")
CommandButton2.Width = 32
CommandButton2.Height = 32
CommandButton2.Picture = LoadPicture("c:\scripts\cd.bmp")
CommandButton3.Width = 32
CommandButton3.Height = 32
CommandButton3.Picture = LoadPicture("c:\scripts\monitor.bmp")
CommandButton4.Width = 32
CommandButton4.Height = 32
CommandButton4.Picture = LoadPicture("c:\scripts\printer.bmp")
End Sub
Sub CommandButton1_Click()
DataArea.InnerHTML = "You clicked button 1."
End Sub
Sub CommandButton2_Click()
DataArea.InnerHTML = "You clicked button 2."
End Sub
Sub CommandButton3_Click()
DataArea.InnerHTML = "You clicked button 3."
End Sub
Sub CommandButton4_Click()
DataArea.InnerHTML = "You clicked button 4."
End Sub
</Script>
<body topmargin="0" rightmargin="0" leftmargin="0">
<table width="100%" border="1" width="100%" bordercolorlight="buttonface"
bordercolordark="buttonface" style="border-collapse:collapse">
<tr>
<td width="100%" bgcolor="buttonface">
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"
title="Get network connections information"></object>
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton2"
title="Get CD/DVD drive information" ></object>
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton3"
title="Get monitor information" ></object>
<object classid="clsid:D7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton4"
title="Get printer information" ></object>
</td>
</tr>
<table>
<p> <p>
<blockquote>
<span id=DataArea></span>
</blockquote>
</body>
</html>