首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用TAction.Shortcut或TMenuItem.Shortcut?

如何禁用TAction.Shortcut或TMenuItem.Shortcut?
EN

Stack Overflow用户
提问于 2009-12-11 16:22:38
回答 3查看 2.2K关注 0票数 3

我正在开发一个Word插件,不知何故,在TAction.ShortCut中定义的快捷键总是被触发多次,这对我来说很棘手,很难解决,所以我求助于TForm.OnKeyDown事件并清除了所有TAction.ShortCut属性,这种方法工作得很好,除了快捷键不显示在相应的菜单项上,但我希望它们显示在那些菜单项上。

所以我提出了这个想法:设置TMenuItem.Shortcut的值,这样程序就可以向最终用户显示快捷键提示,而不允许VCL处理这些快捷键,而是在TForm.OnKeyDown中处理它们。所以我的问题是如何禁用TAction.Shortcut或TMenuItem.Shortcut?提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-11 16:42:13

首先,您在TActionTMenuItem上都有一个Enabled属性。只要将其设置为False即可。

接下来,事件被多次触发的可能原因之一是您可能正在使用Application.ProcessMessages;或者您正在使用的至少是一个编写不佳的组件在这么做。使用Delphi的特性应该非常小心,因为它会导致“重入”代码(无意的递归)。

票数 1
EN

Stack Overflow用户

发布于 2009-12-11 16:53:38

问题的根本原因是事件被多次触发。当然,您可以尝试解决此问题,但我建议这样做:

每当你点击eventhandler.

  • Copy时,
  • 都会在你的breakpoint.
  • Start Call Stack的content [CTRL+ALT+S]中放置一个断点到你喜欢的任何编辑器中,头脑风暴说明为什么调用会导致多次点击事件。
    • 修复你的代码,如果它是你要修复的代码。
票数 0
EN

Stack Overflow用户

发布于 2009-12-14 23:42:44

黑客方式(通常不推荐):复制单独文件夹中包含TAction的单元,修改使ShortCut方法不做任何事情的TAction源代码。将此文件夹放入搜索路径作为第一个项目。重建你的应用。

我使用这种技术来修复VCL中的bug,但是在安装Delphi补丁之后,您不应该忘记更新修改过的单元的“hacked”版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1886602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档