Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 077

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте!
Как к своей иконке в трее привязать PopupMenu ?

Зараннее благодарен!!!!!

wolfworl-1427 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: wolfworl-1427 (статус: Посетитель)
Вопрос отправлен: 2 ноября 2007, 20:41
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Aleksey P. Kharitonov

Здравствуйте, wolfworl!
Кидаем на форму PopupMenu. После запуска скрываем , добавляем иконку в трей и по правому клику мышкой на иконке в трее показываем это меню с помощью обработчика события WM_USER + 1, например такого:

Приложение:
  1. Form = class(TForm)
  2. ...
  3. protected
  4. procedure MenuPopup(Var Msg: TMessage); message WM_USER + 1;
  5. end;
  6.  
  7.  
  8. procedure TFMain.MenuPopup(Var Msg: TMessage);
  9. var
  10. CursorPos: TPoint;
  11. begin
  12. case Msg.lParam of
  13. WM_RBUTTONDOWN: begin
  14. SetForegroundWindow(MainMenu.Handle);
  15. GetCursorPos(CursorPos);
  16. MainMenu.Popup(CursorPos.X, CursorPos.Y);
  17. PostMessage(Handle, WM_NULL, 0, 0);
  18. end;
  19. end;
  20. end;


Ответ отправил: Aleksey P. Kharitonov (статус: 3-ий класс)
Время отправки: 2 ноября 2007, 21:01

Ответ #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]:

А Вы используете сторонние компоненты для отображения иконки в трее? Если да то какие?
Aleksey P. Kharitonov

Aleksey P. Kharitonov (статус: 3-ий класс), 2 ноября 2007, 21:06 [#2]:

Да, забыл добавить...

MainMenu: TPopupMenu;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:50
Выполнено за 0.03 сек.