タスクバーのデルファイプログラミングステータスエリア

タスクバー上のWindowsデスクトップは、システムクロックを表示する凹部領域を有し、そしていくつかのアイコンは、矩形領域は、Windowsタスクバーのステータス領域(タスクバーのステータス領域)です。Borland Delphiのタスクバーのステータス領域を使用してプログラミングを紹介しますこの記事では、そのアプリケーションのアイコンがタスクバーのステータス領域に表示される方法です。

----原則

----実装のWindows API関数Shell_NotifyIconを通じて、追加、削除、および変更するタスクバーのステータス領域にアイコンが、この機能はSHELL32.DLL Windowsのダイナミックリンクライブラリで提供されます。Delphiでは、Shell_NotifyIcon ShellAPI細胞の機能は、文です

次のように----関数のプロトタイプは次のとおりです。

----関数Shell_NotifyIcon(dwMessage:DWORD; lpData:ポインタPNotifyIconData):BOOL。STDCALL;

----前記パラメータ値のタイプは、3つの値のいずれかであることができ、実行するdwMessage Shell_NotifyIcon操作機能を決定されます。

---- NIM_ADD(値0):タスクバーのステータス領域にアイコンを挿入します。

---- NIM_DELETE(1の値):タスクバーのステータス領域からアイコンを削除します。

---- NIM_MODIFY(2値):タスクバーのステータス領域、メッセージまたは通知メッセージのアイコンを変更します。

---- lpDataパラメータは、ポインタレコード、次のように定義されたレコードタイプNOTIFYICONDATAのタイプ(型構造)です。

=レコードNOTIFYICONDATA
cbSizeの:DWORD;
WND:HWND;
ユビキタスID:UINT;
uFlags:UINT;
uCallbackMessage:UINT;
HICON:HICON;
szTip:AnsiCharのの配列[0 63];
END;
---- cbSizeの:NOTIFYICONDATA記録サイズ。
---- WND:ウィンドウは、このステータスエリアに関連するアイコンを扱う、このウィンドウはuCallbackMessageメッセージを処理します。

----ユビキタスID:ステータスエリア定義された識別子からプログラムアイコン。

---- uFlags:このフィールドは、NOTIFYICONDATAレコードメンバーuCallbackMessage、HICON、有効なszTipこれら三つのどの項目の値を示しています。その値は、次の3つ(または操作)の組み合わせであってもよいです。

---- NIF_MESSAGE(値1):uCallbackMessageエントリは有効な情報が含まれています。

---- NIF_ICON(値2):HICONエントリは有効な情報が含まれています。

---- NIF_TIP(値4):szTipエントリは有効な情報が含まれています。

---- uCallbackMessage:(32ビット整数)プログラムは、メッセージ識別子を定義します。アイコンの上にマウスポインタが移動すると、ステータスエリア(すなわち、マウスイベントが発生する)、指定されたウィンドウWND uCallbackMessageメッセージを送信するオペレーティングシステムをクリックします。uCallbackMessageメッセージに、lParamにパラメータがマウスWindowsメッセージのタイプを含み、のwParamパラメータは、アイコンの識別(すなわち、UID)を含んでいます。WM_LBUTTONDOWN、WM_RBUTTONDOWN、WM_MBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONUP、WM_MBUTTONUP、WM_MOUSEMOVE、WM_LBUTTONDBLCLK、WM_RBUTTONDBLCLKとWM_MBUTTONDBLCLK:効果的なマウスメッセージには以下のものが含まれます。

---- HICON:アイコンのハンドルを指定します。

---- szTip:メッセージアイコン(63文字以内)に表示​​されます。

---- Delphiがで達成するために

----上記の説明を通じて、我々は簡単にプログラミングタスクバーのステータスエリアは主に二つの側面に対処していることを見ることができます追加、削除、アイコンを変更、および通知メッセージを処理します。アイコンを追加するために、Shell_NotifyIcon関数を呼び出すことによって行うことができ、操作を変更、削除します。カスタマイズされた通知メッセージのために、私たちはメッセージループで対処しなければなりません。

----次の例では、ステータス領域は、アイコンは、動作例、並びに通知メッセージアイコンを処理するための基本的な枠組みを変更、および削除追加されることを示します。

ユニットUnit1は、

インタフェース

使用して
Windowsの、メッセージ、sysutilsの、クラス、グラフィックス、
コントロール、フォーム、ダイアログ、ExtCtrls、ShellAPIは、

constの
WM_USERのWM_TRAYNOTIFY + = 1; //カスタム通知メッセージ

入力
TForm1 =クラス(TFormは)
タイマ1:TTIMERと、
手順FormCreate(送信者:TObjectを);
手順Timer1Timer(送信者:TObjectを);
手順FormDestroy(送信者:TObjectを);
プライベート
{プライベート宣言}
公共
{公開宣言}
手順のWndProc(VARのメッセージ:TMessage); オーバーライド;
終わり;

VAR
をForm1:TForm1;
ND0、ND1:NOTIFYICONDATA。
HS:ロングワードの配列[0..9]。

実装
{$ R * .DFM}

TForm1.FormCreate手順(送信者:TObjectを);
始める
この10アイコンリソースIcon0..Icon9 //負荷、
およびそのハンドルを保存します。
// 0..9アイコンIcon0..Icon9は9桁の数字に対応しています。
HS [0]:LoadIcon(hInstanceは、 'Icon0を')=;
HS:(hInstanceは、 'ICON1')LoadIconを= [1]
HS [2]:LoadIcon(hInstanceは、 'ICON2を')=;
HS [3]: = LoadIcon(hInstanceは、 'ICON3');
HS:(hInstanceは、 'Icon4')LoadIconを= [4]
HS:LoadIcon(hInstanceは、 'Icon5を')= [5]
HS:、hInstanceは(LoadIconを= [6] 'Icon6');
HS:LoadIcon(hInstanceは、 'Icon7を')= [7]
HS:LoadIcon(hInstanceは、 'Icon8を')= [8]
HS [9]:LoadIcon(hInstanceは、 'Icon9は')=。

//填充NOTIFYICONDATA记录型变量ND0
nd0.cbSize:=のはsizeof(NOTIFYICONDATA)。
nd0.Wnd:=ハンドル;
nd0.uID:= 0;
nd0.uFlags:= NIF_MESSAGEまたはNIF_ICONまたはNIF_TIP。
nd0.uCallbackMessage:= WM_TRAYNOTIFY。
nd0.hIcon:= HS [0]。
StrPLCopy(nd0.szTip、 'こんにちは、世界!'、63);

//填充NOTIFYICONDATA记录型变量ND1
nd1.cbSize:=のはsizeof(NOTIFYICONDATA)。
nd1.Wnd:=ハンドル;
nd1.uID:= 1;
nd1.uFlags:= NIF_MESSAGEまたはNIF_ICONまたはNIF_TIP。
nd1.uCallbackMessage:= WM_TRAYNOTIFY。
nd1.hIcon:= HS [0]。
StrPLCopy(nd1.szTip、63 'サイモンはデイジーを愛しています');

//タスクバーのステータス領域にアイコンを追加
Shell_NotifyIcon(NIM_ADD、@ ND0);
Shell_NotifyIcon(NIM_ADD、@ ND1);
END;

TForm1.Timer1Timer手順(送信者:TObjectを);
VAR
ST:SYSTEMTIME;
始める
//秒ごとにアイコン更新:アイコンが0に10秒を表示し、
アイコンは秒のビット数を表示します。
GetLocalTime(ST);
nd0.hIcon:= HS [st.wSecondは、10 DIV];
nd1.hIcon:= HS [st.wSecond MOD 10];
//タスクバーのステータス領域にアイコンを変更
Shell_NotifyIcon(ND0 @ NIM_MODIFY)。
Shell_NotifyIcon(NIM_MODIFY、@ ND1);
END;

TForm1.FormDestroy手順(送信者:TObjectを);
始める
//は、タスクバーのステータス領域からアイコンを削除
Shell_NotifyIcon(NIM_DELETE、@ ND0);
Shell_NotifyIcon(NIM_DELETE、@ ND1);
END;

//処理通知メッセージ
手順TForm1.WndProc(VARメッセージ:TMessage);
VARの
ICONID:整数;
白金:TPoint;
始める
IF msg.Msg = WM_TRAYNOTIFY次いで
開始
{
通知メッセージに、wParamにパラメータのUIDアイコン
のlParamパラメータマウスイベントのタイプ。
}
ICONID:= msg.wParam;
//画面上のマウス位置取得
GetCursorPos(PT)を、

次のように//基本的な枠組みの通知メッセージ処理は次のとおりです。
の場合msg.lParam
WM_LBUTTONDOWN:
開始
マウスの右ボタンが//押されて
終了。
WM_RBUTTONDOWN:
開始
//マウスの左ボタンが押されている
エンド;
WM_LBUTTONUP:
開始
//マウスの左をリリースキー
END;
WM_RBUTTONUP:
始まる
マウス右放し//
終了;
WM_MOUSEMOVE:
始まる
アイコンの上にマウスを移動//
END;
WM_LBUTTONDBLCLK:
開始
]をクリックし、ダブル//
終了;
WM_RBUTTONDBLCLK:
開始
//マウスの右ボタンをダブルクリックして
終了;
END; //ケースエンド
エンド
の他のメッセージ処理のWndProc他には、//親クラスを呼び出す
継承し;
END;

終わり。

おすすめ

転載: www.cnblogs.com/blogpro/p/11446676.html