Click here to visit our sponsor

Tray Control


Tray Control について

このコンポーネント(TrayEr.ocx)は、2つのコントロールを含んでいます。

ここでは、その1つである Tray Control についての情報を記します。
またコンテナHTA を使用します。

TrayEr.ocx は ver1.20以降を使ってください。

このコントロールの性格上、インスタンスは1つにしてください。
(サンプルコードは JScript で記述し、コントロールのインスタンスを TrayCtrl としています)


機能


ステータスバー

ステータスバーの表示が可能です。
ただし (DHTML において) <body> は、ステータスバーがある事を考慮しません。

StatusHeightプロパティで縦サイズを取得できます。
(未表示の時は 0 を返します)

document.body.clientHeight - TrayCtrl.StatusHeight
をクライアントの縦サイズとして下さい。


ホットキー

ホットキーは、コンテナのウインドウが アクティブ・非アクティブ に関らず、受け付け可能なキーイベントです。
したがって、コンテナがタスクトレイに入ってるいる状態でも、指定したキーでコンテナを操作できます。

CTRL+F11 でウインドウをアクティブにする例

<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 プロパティ

Contained プロパティを有効にすると、コンテナをサブクラス化します。
これにより Tray Control はコンテナの一部のイベントを関知する事が出来ます。

ただし、VBIDE環境での実行 など、サブクラス化すると不都合のあるコンテナがあります。その場合使わないようにして下さい。
(デフォルトでは無効です)

このプロパティが有効なとき、以下の機能が動作します。

  • ステータスバーを表示している場合、バーを自動的にリサイズします。
    • プロパティが無効な場合、リサイズ時に Refresh メソッドを実行することで同様の事ができます。
  • コンテナにメニュー(Menu Control)を追加設定する場合、メニュー選択時のイベントが発生します。
  • 次のイベントが発生します。
    • 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 オブジェクトのプロパティとメソッドになります)


サンプル

起動時からタスクトレイに入れてしまう HTA

<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: むたぐち さん)


TrayEr Control

HOME

兄弟ページ 姉妹ページ
Click here to visit our sponsor