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

bcb 中 TrayIcon 如何設定

答題得分者是:cmf
shangnang
一般會員


發表:7
回覆:13
積分:4
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-29 13:37:09 IP:203.75.xxx.xxx 未訂閱
bcb 中 TrayIcon 如何設定才能在視窗隱藏時 mouse 右鍵click 右下角的icon後彈出popmenu 然後可以從popmenu的選項中關閉程式 謝謝幫忙
johnny_1121
一般會員


發表:12
回覆:58
積分:24
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-29 13:42:34 IP:192.72.xxx.xxx 未訂閱
BCB 小世界好像有類似的example 你會用MESSAGE_MAP和callback function嗎?
shangnang
一般會員


發表:7
回覆:13
積分:4
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-29 14:04:56 IP:203.75.xxx.xxx 未訂閱
不好意思我不太會用message map 耶 請大哥指導一下吧 十二萬分的感謝
shangnang
一般會員


發表:7
回覆:13
積分:4
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-29 14:12:47 IP:203.75.xxx.xxx 未訂閱
我是用BCB的vcl TTrayIcon 元件它本來就有icon 但是我想把它換成我想要的圖
johnny_1121
一般會員


發表:12
回覆:58
積分:24
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-29 14:31:01 IP:192.72.xxx.xxx 未訂閱
引言: 我是用BCB的vcl TTrayIcon 元件它本來就有icon 但是我想把它換成我想要的圖
Q1: 我沒用過BCB的TTrayIconㄝ…圖我是用TResourceStream讀出RC檔內包的圖 Q2: PoupoMenu的問題,cmf前輩已提供(cmf大大提供的code粉漂亮ㄝ!)
shangnang
一般會員


發表:7
回覆:13
積分:4
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-29 15:17:10 IP:203.75.xxx.xxx 未訂閱
真是對不起cmf前輩 我看不懂cmf前輩提供的code 請問一下那斷code 要放置在那裡呢 我放在TForm(Owner)裡出現這樣的訊息 C++ Error] ECUnit1.cpp(20): E2451 Undefined ymbol 'NotifyIconData C++ Error] ECUnit1.cpp(21): E2451 Undefined symbol 'IconData' 還是要include什麼東東呢 我有include 還是不行 謝謝個位前輩
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-29 15:36:45 IP:61.218.xxx.xxx 未訂閱
    //TEST.H //.........................................    #include "stdio.h" #include "process.h" #include "assert.h" #include "crtdbg.h" #include "locale.h" #include "time.h" #include  #include #include class TEST { public: Daemon; virtual ~TEST(); static LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); protected: void AddTrayIcon(); void CheckTrayIcon(); void RemoveTrayIcon(); bool SendTrayMsg(DWORD msg); HWND m_hwnd; HMENU m_hmenu; UINT m_timer; NOTIFYICONDATA m_nid; }; //........................................... //TEST.CPP //........................................... #include "stdio.h" #include "process.h" #include "assert.h" #include "crtdbg.h" #include "locale.h" #include "time.h" #include "tchar.h" #include "windows.h" #include "io.h" #include "TEST.h" TEST::TEST { // Create a dummy window WNDCLASSEX wndclass; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wndclass.lpfnWndProc = TEST::WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = pApp->m_instance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = (const char *) NULL; wndclass.lpszClassName = DAEMON_CLASS_NAME; wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wndclass); m_hwnd = CreateWindow(DAEMON_CLASS_NAME, DAEMON_CLASS_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, pApp->m_instance, NULL); // record which client created this window SetWindowLong(m_hwnd, GWL_USERDATA, (LONG) this); // Load a popup menu m_hmenu = LoadMenu(pApp->m_instance, MAKEINTRESOURCE(IDR_TRAYMENU)); // Create the tray icon AddTrayIcon(); // A timer checks that the tray icon is intact m_timer = SetTimer( m_hwnd, IDT_TRAYTIMER, 15000, NULL); } void TEST::AddTrayIcon() { SendTrayMsg(NIM_ADD); } void TEST::CheckTrayIcon() { if (!SendTrayMsg(NIM_MODIFY)) { AddTrayIcon(); }; } void TEST::RemoveTrayIcon() { SendTrayMsg(NIM_DELETE); } bool TEST::SendTrayMsg(DWORD msg) { m_nid.hWnd = m_hwnd; m_nid.cbSize = sizeof(m_nid); m_nid.uID = IDR_TRAY; // never changes after construction m_nid.hIcon = LoadIcon(pApp->m_instance, MAKEINTRESOURCE(IDR_TRAY)); m_nid.uFlags = NIF_ICON | NIF_MESSAGE; m_nid.uCallbackMessage = WM_TRAYNOTIFY; m_nid.szTip[0] = '\0'; // Use resource string as tip if there is one if (LoadString(pApp->m_instance, IDR_TRAY, m_nid.szTip, sizeof(m_nid.szTip))) { m_nid.uFlags |= NIF_TIP; } return (bool) (Shell_NotifyIcon(msg, &m_nid) != 0); } // Process window messages LRESULT CALLBACK TEST::WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { TEST *_this = (TEST *) GetWindowLong(hwnd, GWL_USERDATA); switch (iMsg) { case WM_CREATE: { return 0; } case WM_COMMAND: switch (LOWORD(wParam)) { case ID_MENU1: break; case ID_MENU2: break; case ID_MENU3: break; case IDD_APP_ABOUT: ShowAboutBox(); break; } return 0; case WM_TRAYNOTIFY: { HMENU hSubMenu = GetSubMenu(_this->m_hmenu, 0); if (lParam==WM_LBUTTONDBLCLK) { // double click: execute first menu item ::SendMessage(_this->m_nid.hWnd, WM_COMMAND, GetMenuItemID(hSubMenu, 0), 0); } else if (lParam==WM_RBUTTONUP || lParam==WM_LBUTTONUP) { if (hSubMenu == NULL) { return 0; } // Make first menu item the default (bold font) ::SetMenuDefaultItem(hSubMenu, 0, TRUE); POINT mouse; GetCursorPos(&mouse); ::SetForegroundWindow(_this->m_nid.hWnd); ::TrackPopupMenu(hSubMenu, 0, mouse.x, mouse.y, 0, _this->m_nid.hWnd, NULL); } return 0; } case WM_TIMER: _this->CheckTrayIcon(); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } TEST::~TEST() { KillTimer(m_hwnd, m_timer); RemoveTrayIcon(); DestroyMenu(m_hmenu); } 發表人 - cmf 於 2003/01/29 15:41:18
------
︿︿
shangnang
一般會員


發表:7
回覆:13
積分:4
註冊:2003-01-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-01-29 16:10:57 IP:203.75.xxx.xxx 未訂閱
非常感謝cmf前輩的回應 但小弟駑鈍有點無法參透其中的奧祕還請前輩見量小弟不斷的打擾 請問一下TEST::TEST 是不是少了了( )還是.... 還有冒昧的再問 小弟要如和將test這個物件加到小弟的project中呢 Thing you very much
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-01-29 16:19:31 IP:61.218.xxx.xxx 未訂閱
shangnang:             Sorry,這個範例僅供參考          如果你要加入 project中          必須作修改    
------
︿︿
shangnang
一般會員


發表:7
回覆:13
積分:4
註冊:2003-01-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-01-29 16:26:46 IP:203.75.xxx.xxx 未訂閱
OK 無論如和還是謝謝前輩的support 我自己在try看看囉
系統時間:2024-04-29 12:52:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!