システム トレイへの Delphi アプリケーションの配置
トーマス・バーウィック/ストーン/ゲッティイメージズ
タスクバーを見てください。時刻が表示されているエリアを参照してください。他のアイコンはありますか?この場所は、Windows システム トレイと呼ばれます。あなたはあなたの デルファイ そこにアプリケーションのアイコン?そのアイコンをアニメーション化しますか?それともアプリケーションの状態を反映しますか?
これは、ユーザーの操作なしで長時間実行されているプログラム (通常、PC で 1 日中実行し続けるバックグラウンド タスク) に役立ちます。
できることは、トレイにアイコンを配置し、同時にフォームを非表示にすることで、Delphi アプリケーションをトレイに (タスク バーではなく、Win スタート ボタンの右に) 最小化しているように見せることです。 .
レッツ・トレイ・イット
幸いなことに、システム トレイで実行されるアプリケーションの作成は非常に簡単です。このタスクを実行するために必要な (API) 関数は、Shell_NotifyIcon だけです。
関数は ShellAPI ユニット 2 つのパラメーターが必要です。 1 つ目はアイコンが追加、変更、または削除されているかどうかを示すフラグで、2 つ目はアイコンに関する情報を保持する TNotifyIconData 構造体へのポインタです。これには、表示するアイコンのハンドル、マウスがアイコン上にあるときにツール ヒントとして表示するテキスト、アイコンのメッセージを受信するウィンドウのハンドル、およびアイコンがこのウィンドウに送信するメッセージの種類が含まれます。 .
まず、メイン フォームの Private セクションに次の行を入力します。
TrayIconData: TNotifyIconData;
次に、メインフォームの作成時メソッドで、TrayIconData データ構造を初期化し、Shell_NotifyIcon 関数を呼び出します。
|_+_|TrayIconData 構造体の Wnd パラメータは、アイコンに関連付けられた通知メッセージを受け取るウィンドウを指します。
hIcon は、トレイに追加するアイコンを指します。この場合、アプリケーションのメイン アイコンが使用されます。
szTip は、アイコンに表示するツールチップ テキストを保持します。この場合、アプリケーションのタイトルです。 szTip は最大 64 文字まで保持できます。
uFlags パラメータは、アイコンにアプリケーション メッセージを処理するように設定し、アプリケーションのアイコンとそのヒントを使用します。の uCallbackMessage アプリケーション定義のメッセージ識別子を指します。システムは、アイコンの外接する四角形でマウス イベントが発生するたびに、Wnd で識別されるウィンドウに送信される通知メッセージに、指定された識別子を使用します。このパラメーターは、フォーム ユニットのインターフェイス セクションで定義された WM_ICONTRAY 定数に設定され、次のようになります。WM_USER + 1;
Shell_NotifyIcon API 関数を呼び出して、トレイにアイコンを追加します。最初のパラメーター「NIM_ADD」は、トレイ領域にアイコンを追加します。他の 2 つの可能な値 NIM_DELETE と NIM_MODIFY は、トレイ内のアイコンを削除または変更するために使用されます。この方法については、この記事の後半で説明します。 Shell_NotifyIcon に送信する 2 番目のパラメーターは、初期化された TrayIconData 構造です。
一つを取って
ここでプロジェクトを実行すると、トレイの時計の近くにアイコンが表示されます。 3つのことに注意してください。
1) まず、トレイに配置されたアイコンをクリックしても (またはマウスで他の操作を行っても) 何も起こりません。まだプロシージャ (メッセージ ハンドラ) を作成していません。
2) 2 つ目は、タスク バーにボタンがあることです (もちろん、そこには入れたくありません)。
3) 3 番目に、アプリケーションを閉じると、アイコンがトレイに残ります。
2を取ります
これを逆に解いてみましょう。アプリケーションを終了するときにトレイからアイコンを削除するには、Shell_NotifyIcon を再度呼び出す必要がありますが、最初のパラメーターとして NIM_DELETE を使用します。これは OnDestroy で行いますイベントハンドラメインフォーム用。
|_+_|アプリケーション (アプリケーションのボタン) をタスク バーから非表示にするには、簡単な方法を使用します。プロジェクトのソース コードに次の行を追加します。 Application.ShowMainForm := False; Application.CreateForm(TMainForm, MainForm); の前に;たとえば、次のようにします。
|_+_|
最後に、トレイ アイコンをマウス イベントに応答させるには、メッセージ処理手順を作成する必要があります。まず、フォーム宣言の public 部分でメッセージ処理手順を宣言します。メッセージ WM_ICONTRAY;次に、このプロシージャの定義は次のようになります。
|_+_|このプロシージャは、WM_ICONTRAY というメッセージのみを処理するように設計されています。これはメッセージ構造体から LParam 値を取得します。これにより、プロシージャがアクティブ化されたときにマウスの状態を知ることができます。簡単にするために、左マウス ダウン (WM_LBUTTONDOWN) と右マウス ダウン (WM_RBUTTONDOWN) のみを処理します。マウスの左ボタンがアイコン上で押されるとメイン フォームが表示され、右ボタンが押されると非表示になります。もちろん、ボタンアップ、ボタンのダブルクリックなど、この手順で処理できる他のマウス入力メッセージがあります。
それでおしまい。早くて簡単。次に、トレイのアイコンをアニメーション化する方法と、そのアイコンにアプリケーションの状態を反映させる方法について説明します。さらに、アイコンの近くにポップアップ メニューを表示する方法についても説明します。