Добавление нового ShortCut в среду разработки Delphi не слишком сложно, потому что API открытых инструментов предоставляет для этого сервис. Я что-то по-видимому более сложным попробовать: Добавить Wordstar как дополнительный Shortcut:Как добавить привязку клавиш Shift + Ctrl + H X к среде Delphi с помощью ToolsApi?
Я хочу что-то произойдет, когда пользователь нажимает
Shift + Ctrl + H, а затем с помощью одной клавиши X
где X должен независимо от состояния клавиши Shift.
Это мой код:
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 добавляется без ключа-модификатора.
Любая идея? Возможно, это известное ограничение/ошибка API-интерфейсов Delphi IDE/Open Tools? Известно ли обходное решение?
Я попробовал его в Delphi 2007 и Delphi 10 Seattle, без разницы.
Спасибо, это решение для общей проверки горячих клавиш, но оно не распространяется на мой конкретный случай, когда у меня нет формы для обработки OnKeyDown. (Помимо этого: вызывать IsKeyDown несколько раз, кажется, не очень хорошая производительность, я бы, вероятно, позвонил GetKeyState только один раз и проверил бы комбинацию клавиш.) – dummzeuch
Вы все равно можете обработать сообщение wm_keydown для приложения. –
Да, я мог. И я, вероятно, сделаю именно это, если не найду решение с помощью API открытых инструментов. К сожалению, мне также придется помешать IDE даже увидеть этот ключ, который может потребовать дополнительного кода. Но я перейду через этот мост, когда доберусь туда. – dummzeuch