禁用上下文菜单上的弹出窗口?

时间:2014-12-09 11:52:54

标签: delphi

如何禁用弹出菜单的弹出窗口?

我的问题是我的列表框有一个很好的上下文菜单,但如果我右键单击一个项目,我执行一些代码,我不希望弹出菜单随后弹出。

但是如果它是列表框中的正常右键,那么当然我想要弹出菜单。

1 个答案:

答案 0 :(得分:2)

没有" OnContextPopup"在德尔福,没有" Handled"参数。在Delphi中执行此操作的一种方法如下:

在表单上找到PopupMenu,单击它,转到对象检查器的事件选项卡,双击" OnPopup"右边的单元格。并插入以下代码(开始后的行):

PROCEDURE TForm1.PopupMenu1Popup(Sender : TObject);
  BEGIN
    IF GetKeyState(VK_SHIFT) AND $8000<>0 THEN Abort
  END;

如果菜单即将弹出时按下两个SHIFT键中的任何一个,这将取消弹出菜单...

另一种方式(在上面的TLama评论的刺激下)是找到你想要抑制弹出窗口的控件的OnContextPopup事件(在这种情况下是你的ListBox),双击它(创建/跳转到事件处理程序)并插入以下代码:

PROCEDURE TForm1.ListBox1ContextPopup(Sender : TObject ; Point : TPoint ; VAR Handled : BOOLEAN);
  BEGIN
    Handled:=(GetKeyState(VK_SHIFT) AND $8000<>0)
  END;

这两种方法的主要区别在于第一种方法是禁止弹出窗口,无论弹出菜单试图弹出哪种控件,而第二种方法只允许您禁止弹出特定控件(就像你一样)可以将相同的弹出菜单分配给多个控件。)