| 
| 
 | Вопрос # 1 077/ вопрос открыт / | 
 |  Здравствуйте!Как к своей иконке в трее привязать PopupMenu ?
 
 Зараннее благодарен!!!!!
 
|  |   Вопрос задал: wolfworl-1427 (статус: Посетитель)Вопрос отправлен: 2 ноября 2007, 20:41
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Aleksey P. Kharitonov Здравствуйте, wolfworl!Кидаем на форму PopupMenu. После запуска скрываем , добавляем иконку в трей и по правому клику мышкой на иконке в трее показываем это меню с помощью обработчика события WM_USER + 1, например такого:
 Приложение:Переключить в обычный режим   Form = class(TForm)  ...   protected    procedure MenuPopup(Var Msg: TMessage); message WM_USER + 1;  end;  procedure TFMain.MenuPopup(Var Msg: TMessage);var  CursorPos: TPoint;begin  case Msg.lParam of    WM_RBUTTONDOWN: begin                      SetForegroundWindow(MainMenu.Handle);                      GetCursorPos(CursorPos);                      MainMenu.Popup(CursorPos.X, CursorPos.Y);                      PostMessage(Handle, WM_NULL, 0, 0);                    end;  end;end;
Ответ #2. Отвечает эксперт: Feniks Здравствуйте, wolfworl!При  добавлении  иконки  на  Tray вы  указывали окно - обработчик  сообщения  и  сообщение (CallbackMessage). Теперь окно, указанное     вами  будет  при  любых  событиях  мыши, происходящих над иконкой   получать  сообщение,  указанное  при  добавлении иконки. При этом   параметры lParam и wParam будут задействованы следующим образом:
 (UINT)wParam   -   содержит ID иконки, над которой произошло событие
 (UINT)lParam   -   содержит стандартное событие мыши, такое как WM_MOUSEMOVE или WM_LBUTTONDOWN.
 
 При  этом,  информация  о  клавишах  смены регистра, так же как и     местоположения  события, передаваемые при стандартных " настоящих"     сообщениях мыши, теряются.       Hо  положение  курсора  можно узнать функцией GetCursorPos(), а состояние   клавиш   смены  регистра  -  функцией  GetKeyState(),  описанных в winuser.h.
 
 Взято из FAQ:
 http://blackman.km.ru/myfaq/cont4.phtml]http://blackman.km.ru/myfaq/cont4.phtml
 ©Drkb::01759
 
 Вы  должны  обрабатывать сообщение, указанное вами при добавлении   иконки  на Tray. При значении (UINT)lParam, равном WM_RBUTTONDOWN  (это обычно дял Pop-Up меню по правой кнопке), или любому другому  необходимому   вам,  вы  должны  вызовом  функции  GetCursorPos()  получить  позицию  курсора в момент события (вряд ли пользователь     успеет  убрать  мышь  за время обработки сообщения, особенно если   он ожидает меню), получить вескриптор Pop-Up меню одним из многих  способов  (LoadMenu(),  GetSubMenu(),  CreateMenu(),  и  т.д.)  и    выполнить следующий код:
 
 SetForegroundWindow(hWnd);
TrackPopupMenuEx(hMenu,TPM_HORIZONTAL|TPM_LEFTALIGN,x, y,hWnd, NULL);
DestroyMenu(hMenu);
PostMessage(hWnd,WM_USER,0,0); где  hWnd  -  дескриптор окна, которое будет обрабатывать команду  меню,
 hMenu - дескриптор меню,
 x  и  y  -  позиция  курсора.
 
 Для подробностей смотрите Win32 SDK Help по функции TrackPopupMenuEx.
 
 Взято из FAQ:
 http://blackman.km.ru/myfaq/cont4.phtml]http://blackman.km.ru/myfaq/cont4.phtml
 ©Drkb::01760
 
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 5 ноября 2007, 11:06
 
 |  
 Мини-форум вопросаВсего сообщений: 2; последнее сообщение — 2 ноября 2007, 21:06; участников в обсуждении: 2. 
|   | Николай Рубан (статус: 10-ый класс), 2 ноября 2007, 20:47 [#1]:А Вы используете сторонние компоненты для отображения иконки в трее? Если да то какие? |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |