【发布时间】:2016-01-31 16:37:47
【问题描述】:
向 Delphi IDE 添加一个新的 ShortCut 并不难,因为 Open Tools API 为此提供了服务。我正在尝试一些显然更复杂的东西:添加一个 Wordstar,比如额外的 ShortCut:
我希望用户按下时发生一些事情
Shift+Ctrl+H 后跟单键 X
无论 Shift 键的状态如何,X 都应该在哪里工作。
这是我的代码:
procedure TGxKeyboardBinding.BindKeyboard(const BindingServices: IOTAKeyBindingServices);
const
DefaultKeyBindingsFlag = kfImplicitShift + kfImplicitModifier + kfImplicitKeypad;
var
GExpertsShortcut: Byte;
ShiftState: TShiftState;
FirstShortCut: TShortCut;
SecondShortCut: TShortCut;
begin
GExpertsShortcut := Ord('H');
ShiftState := [ssShift, ssCtrl];
FirstShortCut := ShortCut(GExpertsShortcut, ShiftState);
SecondShortCut := ShortCut(Ord('X'), []);
BindingServices.AddKeyBinding([FirstShortCut, SecondShortCut],
TwoKeyBindingHandler, nil,
DefaultKeyBindingsFlag, '', '');
end;
所以,如果我设置 ShiftState := [ssCtrl] 按下
Ctrl+H X
调用我的 TwoKeyBindingHandler 方法。
但是使用 ShiftState := [ssShift, ssCtrl] 按下
Shift+Ctrl+H X
什么都不做。
奇怪的是,当指定 ShiftState := [ssShift, ssCtrl](应该只影响第一个键)按下时
Shift+Ctrl+H Shift+X
调用我的 TwoKeyBindingHandler 方法,即使第二个 ShortCut 是在没有修饰键的情况下添加的。
有什么想法吗?这可能是 Delphi IDE/Open Tools API 的已知限制/错误吗?有已知的解决方法吗?
我在 Delphi 2007 和 Delphi 10 Seattle 中尝试过,没有区别。
【问题讨论】:
-
您是否尝试过
SecondShortcut := Shortcut(Ord('x'), []);(即指定小写x)?毕竟,要获得大写的 X 键,您通常也按 Shift 键。 (是的,我知道这是一个老问题)。