線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1680
推到 Plurk!
推到 Facebook!

如何動態改變任務列右下角小圖標的Hint?

尚未結案
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-10 14:56:57 IP:61.150.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-10 21:23:41 IP:61.221.xxx.xxx 未訂閱
1. 使用 Shell_NotifyIcon(NIM_MODIFY, @nid); 2. 我試過用你的方式應該是沒有問題的, 也可以試一下 'ABC'#13#10'DEF' 看看. 不過結果都是可以的. 另外你可以參考這篇很完整的說明: http://www.delphiboy.com/cgi-bin/doc/datacontent.php?no=236
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-11 14:55:46 IP:61.134.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-11 20:55:15 IP:61.221.xxx.xxx 未訂閱
在 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-27 13:23:49 IP:61.150.xxx.xxx 未訂閱
Tip 分行顯示,奇怪是在有#13的sztip中,有時是分行顯示,有時不是。     抱歉!我知道這樣說是不科學的,一套程式怎麼會有兩種結果。     但當時急中生'愚',說呆話,後來發現,其實這可能是作業系統的原因,在Win9x中有#13的sztip是不會分行顯示,但win2000以上可以。        Timhuang兄,你用的是不是win2000以上的作業系統呀? 
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-28 01:08:38 IP:61.221.xxx.xxx 未訂閱
我是用 win2000 沒錯. 不過我是用 #13#10, 請試試看 #13#10 這樣看在 9x 下會不會有問題!
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-05 11:53:58 IP:219.145.xxx.xxx 未訂閱
Hi!Timhuang兄,今天我做了這個測試,在Win98上,無論是#13#10,還是#13都無法讓szTip分行顯示。
系統時間:2024-04-28 2:59:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!