Hey, Scripting Guy!

Hey, Scripting Guy!

TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

Hey, Scripting Guy! アーカイブも忘れずにチェックしてください。

今日の質問 : HTA ウィンドウをクリアする方法はありますか


HTA ウィンドウをクリアする方法はありますか

Q

Scripting Guy さん、よろしくお願いします。HTA ウィンドウをクリアする方法はありますか。

-- DF

A

DF さん、こんにちは。実のところ、Scripting House を 1 つでも見たことのある方なら、ウィンドウをクリアする方法を知っているかどうか、我々に質問することはなかったでしょう。我々の中にはウィンドウのクリア方法を知らない者がいるのは明らかなのですから (仲間の弁護をさせていただくと、ぴかぴかに磨いたクリアな窓に正面衝突しないようにとの小鳥達への配慮なのでしょう。そもそも、我々はじゅうたんに頻繁に掃除機をかけるような人種でありませんが、小鳥がじゅうたんに激突するのは見るにしのびません)。

まず、次の 2 つのスクリプトを使って説明します。1 つはウィンドウ全体をクリアするスクリプト、もう 1 つはウィンドウの一部のみをクリアするスクリプトです。なぜ、2 つもスクリプトが必要なのかと疑問に思うかもしれませんが、それについてはまた後で説明します。お楽しみを台無しにしないためにね。

まず、簡単な HTA から始めましょう。ボタンを 1 つクリックすると HTA ウィンドウ全体がクリアされます。

<html>
<head>
<title>HTA Test</title>
<HTA:APPLICATION 
     ID="objTest" 
     APPLICATIONNAME="Clear Window"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
>
</head>

<SCRIPT LANGUAGE="VBScript">
    Sub ClearWindow
        document.body.InnerHTML = ""
    End Sub  
</SCRIPT>

<body>
    <input id=runbutton type="button" value="Clear" onClick="ClearWindow">
</body>

そうです、これは、非常にシンプルなコードです。最初に、次のコード行を使用してウィンドウのタイトルを指定します。

<title>HTA Test</title>

他にも、HTA 自体のプロパティを設定するためのオプションのコード行がありますが、今日は、それらについては詳しく取り上げません。 詳しい情報については、「HTA Developers Center」(英語)、または Scripting Week 3 の Web キャスト「Going Beyond the Command Line with HTML Applications」(英語) をご覧ください。

ご覧のように、この HTA は単一の要素、すなわち、[Clear] ボタンで構成されています。

<input id=runbutton  type="button" value="Clear" onClick="ClearWindow">

ボタンをクリックすると、ClearWindow というサブルーチンが起動します。

サブルーチンの中身はどうなっているのでしょうか。特別な仕掛けは何もありません。document.body オブジェクトの InnerHTML プロパティに何も設定しない ("") だけです。

document.body.InnerHTML = ""

その結果、HTA ウィンドウがクリアされます。HTA ウィンドウをクリアしたければ、document.body.InnerHTML プロパティを空の文字列に設定するだけです。

しかし、その前に、この方法で、HTA ウィンドウが実際にどのようにクリアされるのかを説明したいと思います。たとえば、次の図は、ボタンをクリックする前の HTA の外観です。

HTA


次の図は、ボタンをクリックした後の HTA の外観です。

HTA


ウィンドウがすっかりクリアされています。つまり、[Clear] ボタンを含めたすべての要素が消えました。今後、インターフェイス要素を含むすべての項目を削除することもあるでしょう。しかし、ボタンなどの項目は残し、古いスクリプトから取得したデータといった特定の項目だけを削除することもあるかもしれません。 そこで、前述のスクリプトを、HTA ウィンドウの一部だけをクリアするように手直ししたものを次に示します。

注 : F5 キーを押して HTA ウィンドウをリフレッシュすると、いつでもユーザー インターフェイスを復元できます。

改訂したコードは次のとおりです。

<html>
<head>
<title>HTA Test</title>
<HTA:APPLICATION 
     ID="objTest" 
     APPLICATIONNAME="Clear Window"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
>
</head>

<SCRIPT LANGUAGE="VBScript">
    Sub ClearWindow
        DataArea.InnerHTML = ""
    End Sub  
</SCRIPT>

<body>
    <input id=runbutton  type="button" value="Clear" onClick="ClearWindow">
    <p>
    <span id=DataArea>This is the data area.</span>
</body>

このコードでは、主に 2 つの作業を行います。まず、<span> タグを追加し、このスパンに DataArea という ID を割り当てます。スパンとは、ご存知のように動的に変更可能な HTA の名前付きの範囲です。たとえば、スクリプトを使用してテキストや HTML 書式設定をスパンに追加できます。

また、すべてのテキストおよび HTML 書式設定のスパンをクリアできます。次に、HTA に加えた 2 つ目の変更ですが、ウィンドウ全体ではなく DataArea スパンのみをクリアするように ClearWindow サブルーチンを変更しました。

Sub ClearWindow
    DataArea.InnerHTML = ""
End Sub

なぜこのように変更したのでしょうか。次の図は、改訂した HTA が初めて読み込まれるときの外観です。

HTA


ご覧のとおり、ボタンのすぐ下にあるスパンには、「This is the data area」というテキストが表示されています。

ボタンをクリックすると、HTA の外観は次のようになります。

HTA


いかがでしょうか。DataArea はクリアされましたが、ウィンドウに変化はありません。つまり、UI 要素 (この簡単な例では、[Clear] ボタンのみ) は削除されず、使用可能な状態になっています。

そしてもちろん、この HTA に小鳥が激突することもありません。これで心配事が 1 つ減りました。


関連情報

Hey, Scripting Guy!- アーカイブもチェックしてください。

ページのトップへページのトップへ