向 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>