unit KeyBinding; interface procedure Register; implementation uses Classes, Windows, Dialogs, ToolsAPI, Menus; type TTestBinding = class(TNotifierObject, IUnknown, IOTANotifier, IOTAKeyboardBinding) procedure TestProc(const Context: IOTAKeyContext; KeyCode: TShortCut; var BindingResult: TKeyBindingResult); function GetBindingType: TBindingType; function GetDisplayName: string; function GetName: string; procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices); public procedure Destroyed; end; const InvalidIndex = -1; var BindingIndex: Integer; procedure Register; begin BindingIndex := (BorlandIDEServices as IOTAKeyBoardServices).AddKeyboardBinding(TTestBinding.Create); end; { TTestBinding } procedure TTestBinding.TestProc(const Context: IOTAKeyContext; KeyCode: TShortCut; var BindingResult: TKeyBindingResult); begin BindingResult := krHandled; ShowMessage('Key Binding Test. Key pressed: ' + ShortcutToText(KeyCode)); end; procedure TTestBinding.BindKeyboard(const BindingServices: IOTAKeyBindingServices); begin BindingServices.AddKeyBinding([ShortCut(Ord('G'), [ssShift, ssCtrl])], TestProc, nil); end; function TTestBinding.GetBindingType: TBindingType; begin Result := btPartial; end; function TTestBinding.GetDisplayName: string; begin Result := 'Keybinding Test'; end; function TTestBinding.GetName: string; begin Result := 'EB_KeybindingTest'; end; procedure TTestBinding.Destroyed; begin if BindingIndex > InvalidIndex then (BorlandIDEServices as IOTAKeyBoardServices).RemoveKeyboardBinding(BindingIndex); BindingIndex := InvalidIndex; end; initialization BindingIndex := InvalidIndex; end.