Microsoft Agentの利用1-オブジェクトの埋め込みと初期化
次はいよいよ、Microsoft Agentの利用になります。
HTMLファイル(拡張子が「.hta」のファイルもHTMLファイルの一種)の中でMicrosoft Agentを利用する際には、「HTMLのタグとしてMicrosoft Agentのオブジェクトを宣言」と「スクリプト内でMicrosoft Agentを初期化」を行う必要があります。
それではMicrosoft Agentのオブジェクト宣言と、Microsoft Agentの初期化について説明していきます。
1. HTMLのタグとしてMicrosoft Agentのオブジェクトを宣言
この宣言はHTMLファイル内に、以下の行を追加すれば完了します。
<object id="AgentControl" classid="CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F" codebase="#VERSION=2,0,0,0"> </object>
少しだけ解説を行います。idとして記述されているAgentControlは、以降のJavaScript内で参照される「オブジェクトの名前」になります。classidは、人間向けではない、プログラム向けの記述です。上記の通り、CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081Fをコピー&ペーストしてください。codebaseに関しては、VERSION=2,0,0,0という書いてある通り、バージョンを表します。
2. スクリプト内でのMicrosoft Agentの初期化
オブジェクトの宣言の後は、プログラム内でのMicrosoft Agentの初期化です。この初期化は、JavaScriptのプログラムとして記述します。
以下のソースコードでは、「エージェントの初期化」と「表示位置の調整」を行っています。
ここでは、プログラム部分のみを示します。実際の「read_text.hta」への組み込みについては、次の『「read_text.hta」への組み込み』の項で示します。また、以下のプログラムで示されている「エージェント初期化」関数InitMA()は、bodyタグのonLoad属性で実行されることになります。
//==== ユーザー変数の初期化 ======================================= // var msAgntX = 100; // Microsoft Agentの表示X位置 var msAgntY = 200; // Microsoft Agentの表示Y位置 //==== 共有変数の初期化 =========================================== // var agent; // エージェント var agentName = "genie"; // エージェント名 //=================================================================== //======================================== // // エージェント初期化 // //======================================== // 引数 :なし // 返り値:なし // 仕様 :エージェントを初期化する。 function InitMA () { //==== エージェント初期化 ========================================= // // エージェントを初期化 AgentControl.Connected = true; // キャラクターを読み込み AgentControl.Characters.load( agentName, agentName + ".acs" ); // キャラクターを初期化 agent = AgentControl.Characters.character( agentName ); agent.LanguageID = 0x0411; // 言語ID(日本語) agent.Balloon.FontCharSet = 128; // 吹き出しフォント //(日本語2バイト文字) //==== 表示位置を調整 ============================================= // agent.moveto( msAgntX, msAgntY ); // 表示位置 }
まずは、それぞれのユーザー変数について説明します。
msAgntX、msAgntYの2つは、Microsoft Agentの表示位置を指定する変数です。この2つの変数は、「エージェント初期化」関数InitMA()内の「表示位置を調整」の部分に記述されたmovetoメソッドで利用されます。movetoメソッドは、デスクトップ上のX座標とY座標を指定して、エージェントの表示位置を移動するメソッドです。
agent変数は、本ソフト内でエージェントを操作する際に参照されるオブジェクトになります。前述のmovetoメソッドのように、agent.moveto( X座標, Y座標 )として、実際の操作を行っていきます。このagent変数は、次章以降の関数でも利用します。agentName変数は、呼び出すエージェントの名前です。今回は「genie」を使うので、genieと指定しています。このagentName変数は、この章のエージェント初期化以外では利用されません。
次に、エージェントの初期化を行うInitMA()関数について説明します。
InitMA()内の、「エージェント初期化」の部分を見てください。AgentControl.Connected = true;とAgentControl.Characters.load( agentName, agentName + ".acs" );の2行で、まずはエージェントを初期化してキャラクターを読み込んでいます。そして、次のagent = AgentControl.Characters.character( agentName );で、agentオブジェクトを初期化して、以降の操作の準備を行っています。
AgentControlは、最初にobjectタグのid属性で指定したオブジェクトの名前です。このオブジェクトを利用して、上記の初期化は行われています。これ以降は、agent変数に格納したオブジェクトに対して各種操作を行っていくことになります。
さて、次の初期化作業は日本語化です。Microsoft Agentはもともと英語のソフトですので、日本語に設定を変更しなければなりません。この設定の変更を、続く2行で行います。エージェントの言語を示すagent.LanguageIDに、日本語の言語IDである0x0411を代入します。続いて、エージェントの吹き出しに表示されるフォントの文字セットを表わすagent.Balloon.FontCharSetに、日本語2バイト文字を示す数値128を代入します。
| 項目 | プロパティ | 日本語化のための値 |
| 言語ID | LanguageID | 0x0411 |
| 吹き出しのフォント文字セット | Balloon.FontCharSet | 128 |
このLanguageIDとFontCharSetの値にどういったものがあるかは、Microsoft社の以下のWebページで確認できます。必要に応じて参照してください。
- Platform SDK: Agent - LanguageID Property - LanguageID 解説ページ
- Platform SDK: Agent - FontCharSet Property - FontCharSet 解説ページ
以上で、Microsoft Agentの初期化は終了です。
3. 「read_text.hta」への組み込み
では、「HTMLのタグとしてMicrosoft Agentのオブジェクトを宣言」と「スクリプト内でのMicrosoft Agentの初期化」を、実際の「read_text.hta」内に組み込んでいくことにします。先ほど書いたように、「エージェント初期化」関数InitMA()は、bodyタグのonLoad属性に記述することにします。
<body onload="InitMA()">
まとめ
ここまでをまとめたソースコードです。
<html>
<head>
<title>文章読み上げ</title>
<script language="JavaScript">
//==== ユーザー変数の初期化 =====================================
//
var msAgntX = 100; // Microsoft Agentの表示X位置
var msAgntY = 200; // Microsoft Agentの表示Y位置
//==== 共有変数の初期化 =========================================
//
var agent; // エージェント
var agentName = "genie"; // エージェント名
//=================================================================
//========================================
//
// エージェント初期化
//
//========================================
// 引数 :なし
// 返り値:なし
// 仕様 :エージェントを初期化する。
function InitMA () {
//==== エージェント初期化 =======================================
//
// エージェントを初期化
AgentControl.Connected = true;
// キャラクターを読み込み
AgentControl.Characters.load( agentName, agentName + ".acs" );
// キャラクターを初期化
agent = AgentControl.Characters.character( agentName );
agent.LanguageID = 0x0411; // 言語ID(日本語)
agent.Balloon.FontCharSet = 128; // 吹き出しフォント
// (日本語2バイト文字)
//==== 表示位置を調整 ===========================================
//
agent.moveto( msAgntX, msAgntY ); // 表示位置
}
// ★★★以降のソースコードはここに追加していく★★★
//=================================================================
</script>
</head>
<body onload="InitMA()">
<form name="f">
<textarea name="ta" rows=20 cols=80>
Microsoft Agentを使った文章読み上げソフト
</textarea>
<br>
<br>
<input type="button" value="クリップボードから文字列取得"
onClick="GetTxt()">
<input type="button" value="テキストエリアを読み上げ"
onClick="SpeakTxt()">
<input type="button" value="読み上げを停止"
onClick="StopSpeak()">
<br>
<br>
<input type="button" value="エージェントの設定ダイアログを開く"
onClick="OpenOption()">
</form>
<object
id="AgentControl"
classid="CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F"
codebase="#VERSION=2,0,0,0">
</object>
</body>
</html>
今後の流れ
以降、各ボタンに対応した関数を作成していきます。この関数は、scriptタグ内に追加していくこととします。次回の記事では、この各関数のみを示し、解説を行っていきます。そして、最後の「まとめ」の章で、すべての関数を組み込んだソースコードを掲載します。
