2016-06-13 6 views
4

У меня есть проект с CoolTrayIcon и PopupMenu с отключенным AutoPopup. Я хотел бы разместить PopupMenu и показать его пользователю. Позиция в порядке, но меню не закрывается, если пользователь нажимает кнопку или нажимает кнопку ESC. Я не нашел никакой собственности, как Active, которая могла бы помочь, если это меню используется или нет.Как закрыть пользовательскую настройку PopupMenu в delphi?

Здесь я устанавливаю меню:

procedure TForm1.CoolTrayIcon1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
var 
    pnt: TPoint; yy:integer; 
begin 

GetCursorPos(pnt); 
yy:=pnt.y; yy:=yy-500; 

if (Button=mbRight) then begin 
    PopupMenu1.Popup(pnt.X, yy); 
end; 

end; 

Как мне удалось меню закроется, если это необходимо?

+0

Что произойдет, если пользователь попытается использовать клавиатуру для отображения меню? –

+0

Меню должно открываться щелчком по щелчку правой кнопкой мыши, это нормально, но как можно закрыть? : D – roll

+0

Контекстные меню следует открывать, когда пользователь запрашивает их. Возможно, щелкнув правой кнопкой мыши. Или, возможно, с помощью клавиатуры. Этот ключ слева от клавиши CTRL правой руки. –

ответ

8

Это известная проблема, которая обсуждается здесь:

PRB: Menus for Notification Icons Do Not Work Correctly

Вам нужно обернуть вызов Popup() следующим образом:

SetForegroundWindow(Handle); 
PopupMenu1.Popup(pnt.X, yy); 
PostMessage(Handle, WM_NULL, 0, 0); 

В этом коде Handle является оконная ручка формы, связанной с значком уведомления.

+0

Cooool, спасибо большое, что с этим работает. – roll

+0

Для меня это не работает. В самом деле, окно меню закрывается клавишей Esc, но после того, как я всплываю в меню, мое приложение полностью мертво, я не могу получить доступ к чему-либо в основной форме. Я упоминаю, что мои иконки в трее HWND являются частным, а не HWND основной формы. –

+1

Прекрасно работает здесь. И есть множество примеров других сообщений и другого кода, которые делают именно это. Поэтому, я думаю, вы либо сделали что-то не так, либо пропала какая-то важная деталь. –

Смежные вопросы