Есть ли в Delphi 7 способ узнать, видимо ли всплывающее меню (отображается на экране) или нет, поскольку в нем отсутствует свойство Visible.
Видимость всплывающего меню Delphi
Ответы (2)
Вы можете создать свой собственный флаг, установив его в событии OnPopup. Проблема в том, чтобы узнать, когда всплывающее меню закрыто. Питер ниже есть решение для этого.
Но я спрашиваю, зачем тебе это? Возможно, есть лучший способ решить основную проблему.
person
Lars Truijens
schedule
26.09.2008
Всплывающее меню управления, теперь я хочу показать меню при определенных условиях, когда элемент управления снова щелкнут. Проблема в том, что когда меню отображается, а щелчок происходит за пределами меню, меню закрывается, и элемент управления не знает, видимо ли меню. (надеюсь не запутал)
- person Drejc; 26.09.2008
Я думаю, что ссылка @Lars, которую дал вам Питер Белоу, поможет вам сделать это. Как сказал Ларс, код Питера должен позволить вам сохранить какую-то собственную переменную состояния/отслеживания. Удачи!
- person robsoft; 26.09.2008
Пример Bellow работает нормально, но вам нужно сохранить состояние в каком-то месте, так как сообщение не распространяется на элементы управления, а только на форму. (по крайней мере в моем примере)
- person Drejc; 26.09.2008
Это в основном для лучшего взаимодействия с пользовательским интерфейсом. Например, кнопка должна быть в нажатом состоянии, когда всплывающее окно открыто, и немедленно переходить в предыдущее состояние, когда всплывающее окно закрывается.
- person M.Mahdipour; 18.06.2016
Это кажется немного проще (я использовал Delphi 2007):
В вашем обработчике сообщений WM_CONTEXTMENU перед вызовом унаследованного обработчика должно появиться всплывающее меню, вы можете установить свой флаг. После звонка по наследству всплывающее меню было закрыто, сбросил свой флаг.
procedure TForm1.WMContextMenu(var Message: TWMContextMenu);
begin
FPopupActive := True;
try
OutputDebugString(PChar(Format('popup opening', [])));
inherited;
finally
FPopupActive := False;
OutputDebugString(PChar(Format('popup closed', [])));
end;
end;
person
Ondrej Kelle
schedule
26.09.2008