Delphi筆記-在任務欄通知區中加圖標
1.實現該功能要用到Shell_NotifyIconA()函數,它在ShellAPI單元中定義,
所以要先用uses語句將其包含進去。
2.定義全局常量:
const
TrayIconMsg=wm_user+1;//自定義消息常量,當右擊任務欄通知區圖標時觸發的消息的處理函數由該常量來指點定
iid:=100;//好像沒什麼用處
3.在窗體類中的private部分中定義自已的消息處理函數
procedure TrayIconMessage(var message:TMessage);message TrayIconMsg;//兩個分號之間的字段表示該消息處理函數的觸發是由TrayIconMsg常量來指定的
4.實現消息處理函數:
procedure TForm1.TrayIconMessage(var message:TMessage);//注意,在實現部分不用加上message TrayIconMsg
var MsgOutPos:TPoint;//用來存放右擊事件發生時,鼠標的位置
begin
inherited;//進行默認處理
if(message.lParam=wm_rButtonUp)then //表示按下右鍵後放開,就執行以下任務
begin
GetCursorPos(MsgOutPos);//取得鼠標的位置
PopupMenu1.Popup(MsgOutPos.x,MsgOutPos.y);//彈出右鍵菜單
end;
message.Result:=0;//不知有什麼用
end;
5.在窗體類的public部分中加入一個成員變量:
TrayIcon:TNotifyIconDataA;
6.實現在任務欄通知區中加入圖標:
procedure TForm1.Button1Click(Sender:TObject);
begin
TrayIcon.cbSize:=sizeof(TNotifyIconDataA);//TrayIcon是TNotifyIconDataA記錄類型,cbSize是該記錄的長度
TrayIcon.Wnd:=Form1.Handle;//Wnd指向的是要調用Shell_NotifyIconA()函數的窗口的Handle
TrayIcon.uID:=iid;//應用程序所定義的任務欄通知區圖標的標識符
TrayIcon.uFlags:=NIF_ICON+NIF_TIP+NIF_MESSAGE;//uFlags指定該記錄中哪些項目有效,若有NIF_ICON則hIcon有效,若有NIF_TIP則szTip有效,若有NIF_MESSAGE則uCallbackMessage有效
TrayIcon.uCallbackMessage:=TrayIconMsg;//uCallbackMessage指定將觸發的消息送給哪個消息處理函數
TrayIcon.hIcon:=Application.Icon.Handle;//hIcon指定放在任務欄通知區中的圖標是什麼
TrayIcon.szTip:='右擊打開快捷菜單';//szTip指定當鼠標停留在任務欄通知區中的圖標上時出現的提示是什麼
Shell_NotifyIconA(NIM_ADD,@TrayIcon);//調用該函數將會在任務欄通知區中放入圖標,第一個參數有3個值:NIM_ADD,表示增加圖標;NIM_MODIFY,表示修改已有的圖標;NIM_DELETE,表示刪除圖標
end;