このコンポーネント(TrayEr.ocx)は、2つのコントロールを含んでいます。
ここでは、その1つである Tray Control についての情報を記します。
またコンテナは HTA を使用します。
TrayEr.ocx は ver1.20以降を使ってください。
このコントロールの性格上、インスタンスは1つにしてください。
(サンプルコードは JScript で記述し、コントロールのインスタンスを TrayCtrl としています)
ステータスバーの表示が可能です。
ただし (DHTML において) <body> は、ステータスバーがある事を考慮しません。
StatusHeightプロパティで縦サイズを取得できます。
(未表示の時は 0 を返します)
document.body.clientHeight - TrayCtrl.StatusHeight
をクライアントの縦サイズとして下さい。
ホットキーは、コンテナのウインドウが アクティブ・非アクティブ に関らず、受け付け可能なキーイベントです。
したがって、コンテナがタスクトレイに入ってるいる状態でも、指定したキーでコンテナを操作できます。
<script type="text/JScript" for="window" event="onload">
// var MOD_CONTROL = 2;
// var VK_F11 = 0x7A;
TrayCtrl.SetHotKey(
777, // ホットキーの ID
2, // MOD_CONTROL
0x7A // VK_F11
);
</script>
<script type="text/JScript" for="TrayCtrl" event="OnHotKey(id)">
TrayCtrl.ShowRestore(); // トレイ中なら元に戻す
TrayCtrl.Activate(); // ウインドウをアクティブにする
</script>
現在のバージョンでは、登録できるホットキーは1つだけです・・・。
Contained プロパティを有効にすると、コンテナをサブクラス化します。
これにより Tray Control はコンテナの一部のイベントを関知する事が出来ます。
ただし、VB の IDE環境での実行 など、サブクラス化すると不都合のあるコンテナがあります。その場合使わないようにして下さい。
(デフォルトでは無効です)
Refresh メソッドを実行することで同様の事ができます。OnSize, OnActivate, OnEnable, OnDropFileコンテナに対してファイルのドロップを使えるようにするには、Contained プロパティ と DropValid プロパティ を有効にします。
<object id="TrayCtrl" classid="CLSID:B0000301-BFDE-11D3-981C-00004CAD9063">
<param name="Contained" value="true">
<param name="DropValid" value="true">
</object>
// コントロールの名前は TrayCtrl にしています
TrayCtrl.Contained = true;
TrayCtrl.DropValid = true;
</object>
ファイルがドロップされると OnDropFile イベントが発生します。ファイル名は DropFile プロパティに格納されます。
複数のファイルがドロップされた場合、ファイルの個数の回数分イベントが回発生します。
<script type="text/JScript" for="TrayCtrl" event="OnDropFile()">
alert(TrayCtrl.DropFile);
</script>
コンテナのウインドウの操作を可能/不可能にします。(Enabled プロパティ)
外部プログラム等を起動し、その間の操作を出来なくするような場合に使って下さい。
Enabled を false にするとマウスの操作がいっさい効かなくなります。
ただし ALT+F4 による終了は出来ます・・・。
ALT+F4 による操作も無効にするには、Contained プロパティを true にします。
(ALT+F4無効化は ver1.21以降)
Tray Control からのイベントハンドラ中に、宣言してあるはずのグローバル変数へのアクセスが出来ない事があるようです。
(特にタスクトレイに格納している時)
その場合、window オブジェクトを付けてください。
例えば、
var Global;
という変数があるとき、
window.Global = 1000;
の様にします。
(グローバル変数と関数は、すべて window オブジェクトのプロパティとメソッドになります)
<html>
<head>
<script type="text/JScript">
window.resizeTo(0, 0);
</script>
<script type="text/JScript" for="TrayCtrl" event="OnRightClick(x, y)">
window.alert("終了します");
window.close();
</script>
<hta:application
id = "objHTA"
border = "thick"
borderStyle = "raised"
caption = "no"
maximizeButton = "no"
minimizeButton = "no"
showInTaskBar = "no"
singleInstance = "yes"
>
</head>
<body>
<object id="TrayCtrl" classid="CLSID:B0000301-BFDE-11D3-981C-00004CAD9063">
<param name="RightClick" value="false">
<param name="TaskTray" value="true">
TrayEr Control
</object>
</body>
</html>
border="none" にするとうまく動きません。
(Thanks: むたぐち さん)