阻止 VCL 子控件继承父弹出菜单

Posted

技术标签:

【中文标题】阻止 VCL 子控件继承父弹出菜单【英文标题】:Stop VCL Child Controls from Inheriting Parent Popup Menu 【发布时间】:2011-02-07 17:16:41 【问题描述】:

我有一个分配给它的 TPopupMenu 的 Delphi 2007 VCL TPanel。面板上有一些 TEdit 控件。编辑继承父面板的弹出菜单。我不想让这个弹出窗口继承,所以编辑将显示默认的 Windows TEdit 弹出菜单,包括复制、剪切、粘贴等,但还没有找到方法。似乎没有“ParentPopupMenu”类型的属性来设置哪些控件从父组件继承它。

【问题讨论】:

【参考方案1】:

尝试将 PopupMenu 的 AutoPopup 属性设置为 False,然后在需要时手动 Popup() 菜单,就像在 TPanel 的 OnContextMenu 事件中一样。

【讨论】:

谢谢,这个 OnContextPopup 代码似乎可以工作: var Control: TControl;开始控制 := FindVCLWindow(Mouse.CursorPos) ;如果 Control = MyPanel 然后开始 MyMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);处理:=真;结尾;结束;【参考方案2】:

这是QC#54286: Parent-PopupMenu overrides standard context menu。 Andreas Hausladen 的 VCL Fix Pack 修复了该问题,使其按您期望的方式运行。

【讨论】:

感谢您的链接。很高兴知道我并不孤单认为这是一个错误。希望 Embarcadero 最终会同意。我决定使用 AutoPopup 修复,因为我想要最简单的修复,而且我只需要一种形式。

以上是关于阻止 VCL 子控件继承父弹出菜单的主要内容,如果未能解决你的问题,请参考以下文章

子菜单弹出背景透明

layui 子弹出框操作成功后, 刷新父弹出框的内容

弹出菜单 阻止冒泡

弹出窗口和上下文菜单

Antd - 是不是可以阻止空格键关闭弹出菜单?

Delphi 7学习开发控件(继承TGraphicControl只画一条线)