我的单位有很多操作,有些操作有快捷方式,有些甚至有相同的快捷方式。这是因为它们属于应用程序中的不同模块,并且它们不同时处于上下文中。
现在我有一个全局非模式对话框(称为 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/