如何解决当子窗体可见时如何防止主菜单操作执行
在 MDI VCL 应用程序中,当我显示非模态窗体时,MainForm 菜单的键盘快捷键会将焦点切换到 MainForm 并执行菜单项操作 - 这绝不是我想要的。
在早期版本的 Delphi 中,可以覆盖 MainForm 的 IsShortCut()
方法(如 answered here),但这在 Delphi 10.4.2 中不再有效。
我尝试了使用 OnShortCut
和 IsShortCut()
中的 TApplication
和 TForm
的各种排列,但没有成功。
覆盖非 MainForm 的 IsShortCut()
以对 Alt+ 键盘组合返回 true 确实可以阻止 MainForm 菜单,但它也会阻止操作表单中的本地热键,所以不是很有帮助。
现在有更好的(或任何!)方法来做到这一点吗?
解决方法
我发现当快捷方式被调用时,主窗体(或活动的 MDI 窗体)在测试快捷方式的分配之前调用容器菜单项的 OnClick
。所以对我有用的是在菜单项的容器菜单的 OnClick
处理程序中启用菜单项(例如,对于文件菜单上的项目,为文件菜单项本身设置 OnClick
事件)。例如。像这样
procedure TMyForm.FileMenuClick(Sender: TObject);
begin
MyMenu.Enabled := Screen.ActiveForm = self;
end;
MyMenu 的相应快捷方式然后不被表单处理,并且可以被活动窗口正确使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。