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.


