gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:29:44 24 4
gpt4 key购买 nike

我有一个有很多 Action 的单元,有些 Action 有快捷方式,有些甚至有相同的快捷方式。这是因为它们在应用程序中属于不同的模块,并且它们不在同一时间上下文中。

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

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

我在 objectinspectors OnActivate 事件中有这段代码:

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

  • 因此,对于每个模块和无模式对话框,上述方法都会注册几个 Action 。当 2 个操作共享相同的快捷方式时,问题就出现了。似乎首先注册的操作获胜并在用户按下快捷方式时执行。
    我更喜欢执行使用该快捷方式注册操作的最后一个操作。

    如何才能做到这一点 ?

    问候

    最佳答案

    如果 Action 在同一个 TActionList 中,则必须将 scNone 分配给要禁用的 Action ,然后将快捷方式分配给新 Action 。前任:

    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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com