?? 程序縮小為任務(wù)條右下角的小圖標(biāo) (2000年11月30日).txt
字號(hào):
程序縮小為任務(wù)條右下角的小圖標(biāo) (2000年11月30日)
本站更新 分類: 作者:srw 推薦: 閱讀次數(shù):914
(http://www.codesky.net)
--------------------------------------------------------------------------------
某些程序運(yùn)行啟動(dòng)后并不出現(xiàn)在任務(wù)條中,而是縮小為任務(wù)條右下角的一個(gè)小圖標(biāo),當(dāng)鼠標(biāo)移到這個(gè)小
圖標(biāo)上時(shí)會(huì)出現(xiàn)一些提示信息、單擊該小圖標(biāo)會(huì)執(zhí)行一些特定的操作。便如任務(wù)條右下角的小喇叭圖標(biāo),單
擊它會(huì)彈出一個(gè)簡單的音量控制條,雙擊會(huì)啟動(dòng)另一個(gè)更大的音量控制程序。
在Shell32.DLL動(dòng)態(tài)鏈接庫中包括一個(gè)函數(shù)Shell_NotifyIconA()可通知Windows在任務(wù)條右下角加入一
個(gè)小圖標(biāo),可惜該函數(shù)的詳細(xì)說明未收入Delphi的幫助文檔中,下面以一個(gè)簡單的實(shí)例來說明如果使用該函
數(shù)。
unit Unit1;
interface
{ 記住在uses部分中包括 ShellAPI}
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
ShellAPI, StdCtrls;
{自定義消息,當(dāng)小圖標(biāo)捕捉到鼠標(biāo)事件時(shí)Windows向回調(diào)函數(shù)發(fā)送此消息}
const MY_MESSAGE = WM_USER + 100;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormPaint(Sender: TObject);
private
procedure OnIconNotify(var Message: TMessage);
message MY_MESSAGE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{當(dāng)小圖標(biāo)捕捉到鼠標(biāo)事件時(shí)進(jìn)入此過程}
procedure TForm1.OnIconNotify(var Message: TMessage);
const
Busy: Boolean = false;
begin
if not Busy then begin
Busy := true;
if Message.LParam=WM_LBUTTONDOWN then
if Application.MessageBox('Are you sure',
'Exit', MB_YESNO)=IDYES then Close;
Busy := false;
end;
end;
{當(dāng)主Form建立時(shí)通知Windows加入小圖標(biāo)}
procedure TForm1.FormCreate(Sender: TObject);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid變量的字節(jié)數(shù)
nid.Wnd := Handle; // 主窗口句柄
nid.uID := -1; // 內(nèi)部標(biāo)識(shí),可設(shè)為任意數(shù)
nid.hIcon := Application.Icon.Handle; // 要加入的圖標(biāo)句柄,可任意指定
nid.szTip := 'This is a test application'; // 提示字符串
nid.uCallbackMessage := MY_MESSAGE; // 回調(diào)函數(shù)消息
nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有效
if not Shell_NotifyIcon(NIM_ADD, @nid) then begin
ShowMessage('Failed!');
Application.Terminate;
end;
{將程序的窗口樣式設(shè)為TOOL窗口,可避免在任務(wù)條上出現(xiàn)}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;
{程序被關(guān)閉時(shí)通知Windows去掉小圖標(biāo)}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid變量的字節(jié)數(shù)
nid.uID := -1; //內(nèi)部標(biāo)識(shí),與加入小圖標(biāo)時(shí)的數(shù)一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小圖標(biāo)
end;
{主窗口初始化完畢并顯示時(shí)將激活Paint重畫事件,此時(shí)將主窗口隱藏}
procedure TForm1.FormPaint(Sender: TObject);
begin
Hide;
end;
end.
上例中將程序的圖標(biāo)放在任務(wù)條右下角,然后隱藏自身,當(dāng)用戶移動(dòng)鼠標(biāo)至該圖標(biāo)上時(shí)會(huì)看到提示字符
串,如果單擊該圖標(biāo)會(huì)出現(xiàn)一個(gè)對話框,選擇Yes退出程序并清除小圖標(biāo)。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -