delphi - 有没有办法用快捷方式覆盖以前注册的操作?

标签 delphi overriding shortcut temporary taction

我的单位有很多操作,有些操作有快捷方式,有些甚至有相同的快捷方式。这是因为它们属于应用程序中的不同模块,并且它们不同时处于上下文中。

现在我有一个全局非模式对话框(称为 objectinspector),可以随时随地启动。它有一些带有快捷方式的操作,与模块中其他位置相同。

因此,我想临时覆盖那些在 objectinspector 处于事件状态时共享相同快捷方式的操作,并在停用时释放它。

我在 objectinspectors OnActivate 事件中有以下代码:

  ClientActions.RegisterAction(ClientActions.actObjectInspectorNewWindow, ShowNewObject);
  • ClientActions 是包含操作的单元。
  • RegisterAction 是将事件与操作连接起来的方法。
  • actObjectInspectorNewWindow 是实际操作。
  • ShowNewObject 是执行操作时应调用的事件。

因此,对于每个模块和无模式对话框,都有一些通过上述方法注册的操作。当两个操作共享相同的快捷方式时就会出现问题。看来第一个注册的操作会在用户按下快捷方式时获胜并执行。 我更喜欢执行使用该快捷方式注册操作的最后一个操作。

如何做到这一点?

问候

最佳答案

如果操作位于同一 TActionList 中,则必须将 scNone 分配给要禁用的操作,然后将快捷方式分配给新操作。例如:

acEditCopy.Enabled:=False;
acEditCopy.ShortCut:=scNone;

acShowCalculator.Enabled:=True;
acShowCalculator.ShortCut:=ShortCut(Ord('C'), [ssCtrl])

这样,检查按下的键是否对应于 ActionList 中的快捷方式的代码在找到分配的第一个 Shourcut 时就不会中断。我希望这可以帮助你,这件事大约一个月前让我发疯了。 :-)

关于delphi - 有没有办法用快捷方式覆盖以前注册的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612553/

相关文章:

java - 为什么 onCommand 从未在插件中使用

python - 如何通过python创建一个url快捷方式

c# - 使用c#禁用键盘

git - 在新的 Vim 窗口中写入 Git 提交消息,然后在 Vim 中提交所有内容

windows - TWebBrowser 和 IE 版本

android - 如何在 firemonkey 中将敏感数据保存为密码?

linux - 覆盖 libc open() 库函数

html - 覆盖 CSS 类以删除填充

delphi - UniqueString 可以是一个函数吗?

delphi - 如何获取应用程序的运行时间?