我正在开发一个Word插件,不知何故,在TAction.ShortCut中定义的快捷键总是被触发多次,这对我来说很棘手,很难解决,所以我求助于TForm.OnKeyDown事件并清除了所有TAction.ShortCut属性,这种方法工作得很好,除了快捷键不显示在相应的菜单项上,但我希望它们显示在那些菜单项上。
所以我提出了这个想法:设置TMenuItem.Shortcut的值,这样程序就可以向最终用户显示快捷键提示,而不允许VCL处理这些快捷键,而是在TForm.OnKeyDown中处理它们。所以我的问题是如何禁用TAction.Shortcut或TMenuItem.Shortcut?提前谢谢你。
发布于 2009-12-11 16:42:13
首先,您在TAction和TMenuItem上都有一个Enabled属性。只要将其设置为False即可。
接下来,事件被多次触发的可能原因之一是您可能正在使用Application.ProcessMessages;或者您正在使用的至少是一个编写不佳的组件在这么做。使用Delphi的特性应该非常小心,因为它会导致“重入”代码(无意的递归)。
发布于 2009-12-11 16:53:38
问题的根本原因是事件被多次触发。当然,您可以尝试解决此问题,但我建议这样做:
每当你点击eventhandler.
[CTRL+ALT+S]中放置一个断点到你喜欢的任何编辑器中,头脑风暴说明为什么调用会导致多次点击事件。发布于 2009-12-14 23:42:44
黑客方式(通常不推荐):复制单独文件夹中包含TAction的单元,修改使ShortCut方法不做任何事情的TAction源代码。将此文件夹放入搜索路径作为第一个项目。重建你的应用。
我使用这种技术来修复VCL中的bug,但是在安装Delphi补丁之后,您不应该忘记更新修改过的单元的“hacked”版本。
https://stackoverflow.com/questions/1886602
复制相似问题