我承认我对你采取的步骤有点困惑。GExperts 让您可以轻松地覆盖其自己的编辑器增强功能的默认键绑定,但我从未见过 GExpert 向导可以让您重新定义库存 IDE 功能或其他第三方扩展的键绑定。
没关系。我多年来一直在使用 GExperts,但我仍然发现我不知道存在的新事物。例如“IDE 菜单快捷方式”功能。这几乎使我之前的回答变得不必要了。但是,由于您已经在使用此功能并且该快捷方式仍然无法使用,因此您可以尝试以下操作:
- 尝试在工具>选项>编辑器选项>键映射中重新排序“增强模块”。
- 尝试在同一个对话框中禁用“重构命令”模块。
如果没有这些,您可以尝试修改我之前的答案。如果编写自己的包并修改 IDE 内部结构仍然没有结果,那可能根本不可能。GExperts 文档也说了这么多:
如果您发现您选择的快捷方式不起作用,可能是因为快捷方式被代码编辑器或其他菜单项保留,您需要选择一个不同的、未使用的快捷方式。
无论如何希望这会有所帮助。
上一个答案:
键盘绑定是使用 Open Tools Api 实现的。不幸的是,它是 IDE 中文档记录最差的部分,所以你有点在黑暗中拍摄。
有两种类型的键绑定:
- Complete - 键到命令的专有映射。一次只能激活一个完整的绑定。
- 部分 - 当前活动的完整绑定的扩展。
我不能肯定地说在 Delphi 2009 中,但在 Delphi 2010 及更高版本中,选项 > 编辑器选项 > 键映射 > 增强模块中有这些部分绑定的列表(至少是那些难以实现显示名称的绑定)。假设可以通过单击每个复选框旁边的复选框来启用/禁用它们,但这似乎对我尝试过的那些没有任何影响,即使在重新加载 IDE 之后也是如此。
“重构命令”是列出的绑定之一。重构包被实现为一个集合 .NET 程序集 ( Borland.Together.Refactoring.*.dll
),只有一个小存根是标准 BPL。使用许多可用的“反射”工具之一检查它的内部工作可能会有所帮助。
在任何情况下,ToolsAPI.pas 中的 IOTAKeyboardServices 接口都是您需要查看更改现有绑定的地方。四个感兴趣的功能:
AddKeyboardBinding
LookupKeyBinding
GetNextBindingRec
RemoveKeyboardBinding
假设它们实际上在可预测的庄园中工作,这些函数应该允许您识别正在处理
CTRL+R.
请记住,任何IDE 包都可以绑定到键盘快捷键,用户可以随心所欲地加载和卸载包。这意味着您不能假设只有一个命令绑定到快捷方式。您甚至不能假设一按和下一按之间的绑定是相同的。
虽然理论上一个快捷方式可以触发多个不相关的命令,但它很少会以这种方式起作用。大多数包假定它们是快捷方式的唯一侦听器并返回 a TKeyBindingResult
of
krHandled
,这将停止对该快捷方式的进一步处理,直到再次按下它。
至于您关于上下文菜单的问题。IDE 中的每个可停靠表单都有一个由操作列表填充的单独上下文菜单。对于每个可停靠表单,此列表也是单独的。据我所知,IDE 的主要操作列表和编辑器窗口的操作列表之间没有关联。我的猜测是 GExperts 的作者不想尝试将上下文菜单的操作列表与主菜单的操作列表相匹配。