如何设置Ctrl + R作为Delphi中"重命名"重构的快捷方式?

mjn*_*mjn 7 delphi delphi-2009

在Delphi 2009中,我尝试使用GExperts Ctrl+R为重命名重构配置快捷方式(易于记忆).我之前没有更改任何键绑定,因此所有内容都处于IDE默认状态.

Ctrl+R实际上在IDE菜单中显示为快捷方式.但按下此组合键在编辑器中无效.

我可以看到Ctrl + R现在显示在IDE菜单中Refactor | Rename ....正如预期的那样Ctrl+R,菜单项"搜索"不再显示默认键绑定 替换......'.

但是,上下文菜单项Refactoring | Rename ...仍显示默认快捷方式Shift+Ctrl+E.

有没有办法设置这个快捷方式?

Ken*_*ran 3

我承认我对你所采取的步骤有点困惑。GExperts 可以让您轻松地覆盖其自身编辑器增强功能的默认键绑定,但我从未见过 GExpert 向导可以让您重新定义常用 IDE 功能或其他第三方扩展的键绑定。

没关系。我已经使用 GExperts 多年了,但我仍然发现了一些我不知道的新东西。例如“IDE 菜单快捷方式”功能。这几乎使我之前的回答变得不必要。但是,由于您已经在使用此功能并且快捷方式仍然不起作用,因此您可以尝试以下一些操作:

  • 尝试在“工具”>“选项”>“编辑器选项”>“按键映射”中对“增强模块”重新排序。
  • 尝试在同一对话框中禁用“重构命令”模块。

如果失败,您可以尝试修改我之前的答案。如果编写自己的包并修改 IDE 内部结构仍然没有产生任何结果,那么这可能根本不可能。GExperts 文档说了这么多:

如果您发现所选的快捷方式不起作用,可能是因为该快捷方式被代码编辑器或其他菜单项保留,您需要选择其他未使用的快捷方式。

无论如何希望这会有所帮助。

之前的回答:

键盘绑定是使用 Open Tools Api 实现的。不幸的是,它是 IDE 中记录最差的部分,因此您有点盲目。

有两种类型的键绑定:

  • 完整 - 按键到命令的唯一映射。一次只能有一个完整的绑定处于活动状态。
  • 部分 - 当前活动的完整绑定的扩展。

在 Delphi 2009 中我不能确定,但​​在 Delphi 2010 及更高版本中,选项 > 编辑器选项 > 键映射 > 增强模块中有这些部分绑定的列表(至少是那些费心实现显示名称的绑定)。据说可以通过单击每个旁边的复选框来启用/禁用它们,但这似乎对我尝试过的那些没有任何影响,即使在重新加载 IDE 之后也是如此。

“重构命令”是列出的绑定之一。重构包被实现为一个 .NET 程序集集合 ( Borland.Together.Refactoring.*.dll),只有一个小存根是标准 BPL。使用许多可用的“反射”工具之一检查其内部工作原理可能会有所帮助。

无论如何,ToolsAPI.pas 中的 IOTAKeyboardServices 接口是您需要更改现有绑定的地方。感兴趣的四个函数:

  • AddKeyboardBinding
  • LookupKeyBinding
  • GetNextBindingRec
  • RemoveKeyboardBinding

假设它们实际上以可预测的方式工作,这些函数应该允许您识别正在处理 CTRL+R.

请记住,任何IDE 包都可以绑定到键盘快捷键,并且用户可以随意加载和卸载包。这意味着您不能假设只有一个命令绑定到快捷方式。您甚至不能假设一次按下与下一次按下之间的绑定是相同的。

虽然从理论上讲,快捷方式可以触发多个不相关的命令,但很少会这样。大多数包假设它们是快捷方式的唯一侦听器并返回 a TKeyBindingResultof krHandled,这将停止对该快捷方式的进一步处理,直到再次按下它。

至于你关于上下文菜单的问题。IDE 中的每个可停靠表单都有一个由操作列表填充的单独上下文菜单。对于每个可停靠表单,此列表也是单独的。据我所知,IDE 的主操作列表和编辑器窗口的操作列表之间没有任何关联。我的猜测是 GExperts 的作者不想尝试将上下文菜单的操作列表与主菜单的操作列表相匹配。