|
Вопрос # 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]:
А Вы используете сторонние компоненты для отображения иконки в трее? Если да то какие?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|