如何禁用弹出式菜单?在上下文菜单上禁用弹出窗口?
我的问题是,我有一个很好的上下文菜单为我的列表框,但如果我移 - 右击一个项目,我执行一些代码,我不想弹出菜单后弹出。
但是,如果它是一个正常的右键单击列表框,那么我当然想要弹出菜单。
如何禁用弹出式菜单?在上下文菜单上禁用弹出窗口?
我的问题是,我有一个很好的上下文菜单为我的列表框,但如果我移 - 右击一个项目,我执行一些代码,我不想弹出菜单后弹出。
但是,如果它是一个正常的右键单击列表框,那么我当然想要弹出菜单。
Delphi中没有“OnContextPopup”,也没有“Handled”参数。在德尔福这样做的一种方式如下:
找到的弹出菜单表单上,单击它,进入Object Inspector的事件选项卡上,双击单元格来的“OnPopup”的权利,并插入下面的代码(行权后开始):
PROCEDURE TForm1.PopupMenu1Popup(Sender : TObject);
BEGIN
IF GetKeyState(VK_SHIFT) AND $8000<>0 THEN Abort
END;
这将打压弹出菜单,如果有两个SHIFT键被按下时,菜单将要弹出...
另一个(上面的TLama的评论引发的)是找到你想要抑制弹出窗口的控件的OnContextPopup事件(在这种情况下,你的ListB牛),双击它(创建/跳转到事件处理程序),然后将下面的代码:
PROCEDURE TForm1.ListBox1ContextPopup(Sender : TObject ; Point : TPoint ; VAR Handled : BOOLEAN);
BEGIN
Handled:=(GetKeyState(VK_SHIFT) AND $8000<>0)
END;
这两种方法之间的主要区别是,第一个抑制弹出窗口,无论哪个控制弹出式菜单试图弹出,而第二种方法允许您仅抑制特定控件的弹出窗口(因为您可以将相同的弹出菜单分配给多个控件)。
处理['OnContextPopup'](http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Controls.TControl.OnContextPopup)事件并返回True如果您想要处理''Handled'参数防止弹出菜单显示。 – TLama 2014-12-09 11:59:33
@TLama:看起来像一个答案,而不是评论! (甚至可能是正确的!) – 2014-12-09 12:20:55