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

無 Form 程式僅有工作列狀態區圖示, 如何處理訊息?

答題得分者是:Justmade
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-15 02:07:39 IP:210.202.xxx.xxx 未訂閱
想要寫一個類似服務的程式, 所以希望程式執行不 CreateForm 而僅產生一個 Icon 在工作列狀態區(也就是右下角有小時鐘的區域), 在 Icon 上點選時才出現功能清單, 目前已經可以做到讓 Icon 正常的顯示以及移除, 看了很多站上的範例與討論, 都是在有 CreateForm 的狀態下, 可由 Form1 來擷取 Message, 所以不知道我這樣的程式該如何擷取 Message 呢? 我的想法認為應該是從 Application 中下手吧. program sysTray; {$R *.res} uses Forms, // Application 需要 windows, // GetTickCount(), DWORD 需要 SysUtils, // StrPCopy() 需要 Messages, // WM_USER 需要 ShellAPI; // Shell_NotifyIcon(), TNotifyIconData 需要 const WM_ICONTRAY = WM_USER 1; taskIconID = 300; tt : DWORD = 5000; appTitle = 'Test System Tray Icon'; var tm : DWORD; NotifyIconData : TNotifyIconData; begin With NotifyIconData do begin cbSize := sizeof(TNotifyIconData); Wnd := Application.Handle; uID := taskIconId; uFlags := NIF_MESSAGE NIF_ICON NIF_TIP; uCallbackMessage := WM_ICONTRAY; hIcon := application.Icon.Handle; StrPCopy(szTip, appTitle); end; Shell_NotifyIcon(NIM_ADD, @NotifyIconData); tm := GetTickCount; while (GetTickCount - tm) <= tt do begin Application.ProcessMessages; end; Shell_NotifyIcon(NIM_DELETE, @NotifyIconData); end. 我是雪龍 發表人 - bestlong 於 2003/07/15 02:09:18
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-15 02:14:21 IP:210.202.xxx.xxx 未訂閱
目前這個程式在執行時, 會讓 Icon 出現 5 秒鐘, 當滑鼠指標移至 Icon 上時也會出現 'Test System Tray Icon' 的 Hint. 真的很好玩, 也看了很多的相關資料讓我逐漸了解 Windows 程式執行時運作的架構. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
davwu
一般會員


發表:13
回覆:12
積分:5
註冊:2003-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-16 09:24:07 IP:61.71.xxx.xxx 未訂閱
有意思,但為什麼,
davwu
一般會員


發表:13
回覆:12
積分:5
註冊:2003-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-16 09:49:52 IP:61.71.xxx.xxx 未訂閱
Sorry,更正回應內容如下: 1.將 Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);Mark掉,則   icon應常駐task bar但用mouse連續點二下到第三次,icon就會消失 2.能指點一下如何讓mouse on icon時按右鍵或點兩下可以作後續動作   例如:call program or show menu?
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-16 13:04:23 IP:211.76.xxx.xxx 未訂閱
會停留 5 秒鐘是因為 tt : DWORD = 5000; 這行程式碼來設定的只是剛開始寫, 先這樣處理. 而 Shell_NotifyIcon(NIM_DELETE, @NotifyIconData); Mark 掉的話, 只是程式沒有自己去移除掉 Icon 就結束了. 所以當你去點選 Icon 時, 系統才去清掉 Icon. 我目前的困難就是要讓滑鼠在圖示上 Click 後要顯示一個 PopupMenu , 若是有 Create 一個 Main form 的話, 可以採取 override Main form 的 WndProc method 來處理 Message, 站上就有很多範例了, 其中共通點就是一定是在 Form 物件內處理. 因為我的程式希望執行起來就不要有 main form 的存在. 只想將所有 Menu 設定在 PopupMenu 上, 在依據使用者點選的項目動態的建立 form 來處理. 所以要怎麼去攔截到 Message 是目前的問題的癥結. 我是雪龍 發表人 - bestlong 於 2003/07/16 13:06:40
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-16 15:14:19 IP:218.16.xxx.xxx 未訂閱
參考一下 : 直接自訂TApplication的WndProc來處理Messages(在沒有Form 的情況下) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34090 我在該文沒加上 Popupmenu 但既能處理 Mouse 在 Tray Icon 的各種 Message 加入 PopupMenu (無論使用 元件或 Window API) 應不是難事。
系統時間:2024-04-28 22:19:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!