Delphi弹出菜单可见性

Delphi弹出菜单可见性,delphi,popupmenu,Delphi,Popupmenu,Delphi 7中是否有办法确定弹出菜单是否显示在屏幕上,因为它缺少visible属性。您可以在OnPopup事件中设置自己的标志。问题在于知道弹出菜单何时关闭。有一个解决办法 但是我的朋友,我问你为什么要这个?也许有更好的方法来解决潜在的问题。这似乎有点简单,我使用了Delphi 2007: 在WM_CONTEXTMENU消息处理程序中,在调用继承的处理程序之前,将显示弹出菜单,您可以设置标志。调用inherited后,弹出菜单已关闭,请重置您的标志 procedure TForm1.WMCo

Delphi 7中是否有办法确定弹出菜单是否显示在屏幕上,因为它缺少visible属性。

您可以在OnPopup事件中设置自己的标志。问题在于知道弹出菜单何时关闭。有一个解决办法


但是我的朋友,我问你为什么要这个?也许有更好的方法来解决潜在的问题。

这似乎有点简单,我使用了Delphi 2007:

在WM_CONTEXTMENU消息处理程序中,在调用继承的处理程序之前,将显示弹出菜单,您可以设置标志。调用inherited后,弹出菜单已关闭,请重置您的标志

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;

菜单上会弹出一个控件,现在我想在再次单击该控件时,在特定条件下显示该菜单。问题是当显示菜单时,单击发生在菜单外,菜单关闭,控件不知道菜单是否可见。希望不要混淆我认为@Lars给你的链接,到下面Peter的解决方案,将帮助你做到这一点,那么。正如Lars所说,Peter的代码应该使您能够保留自己的某种状态/跟踪变量。祝你好运下面的示例工作正常,但您需要将状态存储在某个位置,因为消息不会传播到控件,而只传播到表单。所以,至少在我的例子中,它主要是为了更好的ui交互。例如,当弹出窗口打开时,按钮必须处于按下状态,当弹出窗口关闭时,按钮必须立即变为先前的状态