Видимость всплывающего меню Delphi

Есть ли в Delphi 7 способ узнать, видимо ли всплывающее меню (отображается на экране) или нет, поскольку в нем отсутствует свойство Visible.


person Drejc    schedule 26.09.2008    source источник


Ответы (2)


Вы можете создать свой собственный флаг, установив его в событии OnPopup. Проблема в том, чтобы узнать, когда всплывающее меню закрыто. Питер ниже есть решение для этого.

Но я спрашиваю, зачем тебе это? Возможно, есть лучший способ решить основную проблему.

person Lars Truijens    schedule 26.09.2008
comment
Всплывающее меню управления, теперь я хочу показать меню при определенных условиях, когда элемент управления снова щелкнут. Проблема в том, что когда меню отображается, а щелчок происходит за пределами меню, меню закрывается, и элемент управления не знает, видимо ли меню. (надеюсь не запутал) - person Drejc; 26.09.2008
comment
Я думаю, что ссылка @Lars, которую дал вам Питер Белоу, поможет вам сделать это. Как сказал Ларс, код Питера должен позволить вам сохранить какую-то собственную переменную состояния/отслеживания. Удачи! - person robsoft; 26.09.2008
comment
Пример Bellow работает нормально, но вам нужно сохранить состояние в каком-то месте, так как сообщение не распространяется на элементы управления, а только на форму. (по крайней мере в моем примере) - person Drejc; 26.09.2008
comment
Это в основном для лучшего взаимодействия с пользовательским интерфейсом. Например, кнопка должна быть в нажатом состоянии, когда всплывающее окно открыто, и немедленно переходить в предыдущее состояние, когда всплывающее окно закрывается. - 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