如何禁用弹出菜单的弹出窗口?
我的问题是我的列表框有一个很好的上下文菜单,但如果我右键单击一个项目,我执行一些代码,我不希望弹出菜单随后弹出。
但是如果它是列表框中的正常右键,那么当然我想要弹出菜单。
答案 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;
这两种方法的主要区别在于第一种方法是禁止弹出窗口,无论弹出菜单试图弹出哪种控件,而第二种方法只允许您禁止弹出特定控件(就像你一样)可以将相同的弹出菜单分配给多个控件。)