查看單個文章
舊 2006-03-06, 06:46 PM   #4 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

您的 HTA 新增簡單的工具列

其他 ActiveX 控制項
• Microsoft Office 圖表控制項

• Microsoft Office 核取方塊控制項 (英文)

• Microsoft Office 下拉式方塊 (英文)

• Microsoft Office 進度列 (英文)

• Microsoft Office 試算表控制項 (英文)

• 表格式資料控制項 (英文)


HTML 套用程式的限制 (不幸 HTA 本身也有限制) 有使用上的限制。由於 HTA 相當依賴 HTML 控制項,要新增功能表列或工具列到您的套用程式並非易事。因此一般人只好在畫面上放一堆沒有圖只有標題的按鈕。雖然這樣也能用,但是有點遜(咱們 Scripting Guy 最重視的就是酷)。

幸好還有 ActiveX 控制項可以在 HTA 裡新增功能表列和/或工具列。有些控制項還挺好用的,不過可能有點複雜。老實說,Scripting Guys 覺得無「懶」不成酷。所以要給各位介紹一個簡單的方法,在 Microsoft Office 內安裝指令按鈕 ActiveX 控制項,來建立工具列 (如果您有 Microsoft Office,就有這個控制項。)雖然這不是全世界最炫的工具列,但是總比 HTML 裡面單調的 <button> 標記好多了吧。下面是一個可以輕鬆建立的工具列範例:

https://www.microsoft.com/taiwan/technet/images/scriptcenter/activex/toolbar1.jpg

看吧?還不賴,這些可是真的按鈕,而不是光是圖喔?您可以畫一個類似的工具列,然後將圖片載入 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="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"></object>
</td>
</tr>
<table>

<p>&nbsp;<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 視窗範圍的表格。表格週圍設定了 1 個像素的邊界 (表格由一行一列構成),然後將邊界色彩設定為 buttonface,和表格儲存格的色彩一樣。這麼設定純粹只是美觀,這樣表格就沒有任何邊線。

接著使用者兩行指令碼,建立一個表格資料列和一個表格儲存格 (前面說過,背景色彩為 buttonface)。

<tr>
<td width="100%" bgcolor="buttonface">

現在終於到了有趣的部分:插入指令按鈕。方法是加入 <object> 標記:

<object classid="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"></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 副程式。

單個按鈕的工具列粉墨登場:
https://www.microsoft.com/taiwan/technet/images/scriptcenter/activex/toolbar2.jpg


不好意思,拍照請勿用閃光燈。

聰明的讀者,您可能已經知道怎麼建立多個按鈕的工具列了:只要多插入幾個指令按鈕 ActiveX 控制項的執行個體就可以了 (別忘了每個執行個體要有獨特的 ID,還要在 Window_Onload 副程式設定按鈕內容)。您還需要建立另一個副程式,在按下按鈕後執行。舉例來說,插入第二個按鈕後要加上這個物件標籤:

<object classid="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton2"></object>

接著將這些指令碼插入 Window_Onload 副程式:

CommandButton2.Width = 32
CommandButton2.Height = 32
CommandButton2.Picture = LoadPicture("c:\scripts\cd.bmp")

最後您要建立一個副程式,在 CommandButton 按下後執行:

Sub CommandButton2_Click()
DataArea.InnerHTML = "You clicked button 2."
End Sub

輕輕鬆鬆,就是這麼簡單!

如果您想玩一下,但又不想打字,我們已經替您準備好一個指令碼範例可以複製貼上使用,在 HTA 上建立有四個按鈕的工具列。我們在這個指令碼裡面又附贈一項功能:使用 title 標記替每個按鈕加入工具提示。

<object classid="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"
title="Get network connections information."></object>

只要把滑鼠游標放在 CommandButton 按鈕上,就會跳出一個「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="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton1"
title="Get network connections information"></object>
<object classid="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton2"
title="Get CD/DVD drive information" ></object>
<object classid="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton3"
title="Get monitor information" ></object>
<object classid="clsid7053240-CE69-11CD-A777-00DD01143C57" id="CommandButton4"
title="Get printer information" ></object>
</td>
</tr>
<table>
<p>&nbsp;<p>
<blockquote>
<span id=DataArea></span>
</blockquote>
</body>

</html>
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次