如何動態改變任務列右下角小圖標的Hint? |
尚未結案
|
mathewzhao
中階會員 ![]() ![]() ![]() 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
Q1:如何動態改變任務列右下角小圖標的Hint? Q2:如何讓Hint :"閱覽人數' chr($0d) chr($0a) '共有' inttostr(i) '個人' "分兩行顯示?我加上 "chr($0d) chr($0a)"希望達到這個目的,但不起作用。 我現在是這樣設計的,比較麻煩,請問如何改進?
code如下:
const
trayiconid=1;
‧‧‧ private
ficon:ticon;
fid:tnotifyicondata;
‧‧‧ var
I:integer;
‧‧‧
//動態改變桌面右下角小圖標的Hint
inc(i);
shell_notifyIcon(Nim_delete,@nid);
ficon.free; ficon:=ticon.create;
ficon.handle:=loadicon(hinstance,'trayicon2');
if ficon.handle=0 then
begin
messagedlg('圖標不存在!',mterror,[mbOK],0);
application.terminate;
exit;
end;
with nid do
begin
cbsize:=sizeof(Tnotifyicondata);
wnd:=handle;
uid:=trayiconid;
uflags:=nif_message or Nif_icon or Nif_tip;
uCallbackmessage:=cm_trayicon;
hicon:=ficon.handle;
strPcopy(szTip,'閱覽人數' chr($0d) chr($0a) '共有' inttostr(i) '個人');
end;
shell_notifyicon(NIm_add,@nid);
//動態改變桌面右下角小圖標的Hint procedure TForm1.FormCreate(Sender: TObject);
begin
I:=0; Ficon:=ticon.create;
ficon.handle:=loadicon(hinstance,'trayicon2');
if ficon.handle=0 then
begin
messagedlg('圖標不存在!',mterror,[mbOK],0);
application‧terminate;
exit;
end;
with nid do
begin
cbsize:=sizeof(Tnotifyicondata);
wnd:=handle;
uid:=trayiconid;
uflags:=nif_message or Nif_icon or Nif_tip;
uCallbackmessage:=cm_trayicon;
hicon:=ficon‧handle;
end;
shell_notifyicon(NIm_add,@nid);
end;
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
mathewzhao
中階會員 ![]() ![]() ![]() 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝TimHuang兄的回應! 我已參照你給的文章和一些資料,將Q1這個問題解決。但還有些疑問。
為了將問題說明白,我用:
1。Button1clink 改變Hint
2。Button2clink 改變TrayIcon
請問:
Q1:第8行"UID:=Uint(self);"中的self指的是誰的Instance?為什麼? Q2:第34行"Uint(msg‧wparam)=Uint(self)",將msg.wparam變為Uint與Uint(self)比較,這樣做雖然能通過Compile,但是這樣設計是否可能含有隱患? procedure Tform1.sendtraymessage(Msg:Dword;Flags:Uint);
begin
with Tnd do
begin
cbsize:=sizeof(tnd);
strPLcopy(sztip,pchar(Fhint),sizeof(sztip));
UFlags:=Flags;
UID:=Uint(self);
wnd:=handle;
uCallbackmessage:=cm_trayicon;
hicon:=ficon.handle;
end;
shell_notifyicon(Msg,@Tnd);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Fhint:='閱覽人數:' #13 '共有' inttostr(i) '個人');
sendtraymessage(NIM_Modify,NIF_tip);
end; procedure TForm1.FormCreate(Sender: TObject);
begin
Ficon:=ticon.create;
ficon.handle:=loadicon(hinstance,'trayicon1');
if ficon.handle=0 then
begin
ficon.handle:=loadicon(hinstance,'mainicon');
end;
sendtraymessage(NIM_add,NIF_message or NIF_Icon or NIF_tip);
end; procedure Tform1.messagehandler(var msg:tmessage);
var
point:tpoint;
begin
if Uint(msg.wparam)=Uint(self) then
case msg.LParam of
WM_LbuttondbLclk:
begin
if visible then
hide
else
show;
end;
wm_rbuttonup:
begin
getcursorpos(point);
popupmenu1.popup(point.x,point.y);
end;
end;
end; procedure TForm1.N1Click(Sender: TObject);
begin
close;
end; procedure TForm1.Button2Click(Sender: TObject);
begin
ficon.handle:=loadicon(hinstance,'trayicon2');
if ficon.handle=0 then
begin
ficon.handle:=loadicon(hinstance,'mainicon');
end;
sendtraymessage(NIM_Modify, NIF_Icon );
end;
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
在 NotifyIconData 中的 uID 是一個 UINT 也就是 LongWord, 其值是 0..4294967295 也就是 unsigned integer, 是用來辨識在 Tray 的 icon 用的, 是一個自訂的參數, 無論是在新增, 修改, 刪除 icon, message, tip 都是利用這個 uID 來找出該 tray icon 的, 所以值設定多少都可以, 只是在程式中要記得該數值, 這樣才可以在新增後可以進行修改或是刪除. Q1 的 self 指的是 form1
Q2 的 msg.wparam 就是原來在設定 NotifyIconData 中的 uID, 在程式中進行比較只是確定傳回來的 message 是原來設定的 NotifyIconData 而已. 原則上是在一個程式中若有多個 tray icon 是, 其 message 都是指向同一個 function 時用來辨識是那個 tray icon 產生用的, 若只有一個 tray icon 的話是不用再一次比較確認的. 已寫一參考範例在:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30275 發表人 - timhuang 於 2003/05/11 21:40:51
|
mathewzhao
中階會員 ![]() ![]() ![]() 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
mathewzhao
中階會員 ![]() ![]() ![]() 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |