W
wr960204
Unregistered / Unconfirmed
GUEST, unregistred user!
众所周知中文输入法的英汉切换热键默认是Ctrl+Space,很方便。但是正是由于该热键使
很多中国程序员不知道Delphi的Code Completion的热键也是Ctrl+Space。
有很多人是通过修改输入法的热键来实现的,固然这样做可以随时使用
Code Completion的功能了,但是和大多数人的使用习惯有冲突,可不可以在Delphi中设置
修改热键呢?
DelphiIDE本身是没有该功能的。但是难不倒我们程序员,Delphi不是提供了一个OpenToolsAPI
作为IDE本身扩充的接口么。我们可以在这个上动脑筋。ToolsAPI提供了一个“键盘绑定”
IOTAKeyboardBinding。
{ *************************************************************************** }
{ }
{ Delphi 的IDE代码自动完成快捷键替换程序 }
{ }
{ wr960204(王锐) 2002-2-20 }
{ }
{ *************************************************************************** }
unit UnitNewKeyMap;
interface
uses Windows, Classes, SysUtils, Menus, ToolsAPI, Controls;
procedure Register;
implementation
type //把类写到implementation中免得不必要的访问
TBufferList = class(TNotifierObject, IUnknown, IOTANotifier,
IOTAKeyboardBinding)
function GetBindingType: TBindingType;
function GetDisplayName: string;
function GetName: string;
procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices);
protected
procedure CodeCompletion(const Context: IOTAKeyContext; KeyCode: TShortcut;
var BindingResult: TKeyBindingResult);
end;
procedure Register;
begin
(BorlandIDEServices as
IOTAKeyBoardServices).AddKeyboardBinding(TBufferList.Create);
end;
procedure TBufferList.BindKeyboard(const BindingServices:
IOTAKeyBindingServices);
begin
BindingServices.AddKeyBinding([ShortCut(VK_SPACE, [ssAlt])],
CodeCompletion, Pointer(csCodeList or csManual));
end;
procedure TBufferList.CodeCompletion(const Context: IOTAKeyContext;
KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
begin
(Context.EditBuffer.TopView as
IOTAEditActions).CodeCompletion(Byte(Context.Context));
BindingResult := krHandled;
end;
function TBufferList.GetBindingType: TBindingType;
begin
Result := btPartial;
end;
function TBufferList.GetDisplayName: string;
begin
Result := '代码自动完成解决方案';
end;
function TBufferList.GetName: string;
begin
Result := 'NewKeyMap';
end;
end.
好了把它加入到一个包中,编译并安装。
切换到代码编辑,按以下Alt+Space看看有什么效果。再也不用修改系统输入法的热键了
很多中国程序员不知道Delphi的Code Completion的热键也是Ctrl+Space。
有很多人是通过修改输入法的热键来实现的,固然这样做可以随时使用
Code Completion的功能了,但是和大多数人的使用习惯有冲突,可不可以在Delphi中设置
修改热键呢?
DelphiIDE本身是没有该功能的。但是难不倒我们程序员,Delphi不是提供了一个OpenToolsAPI
作为IDE本身扩充的接口么。我们可以在这个上动脑筋。ToolsAPI提供了一个“键盘绑定”
IOTAKeyboardBinding。
{ *************************************************************************** }
{ }
{ Delphi 的IDE代码自动完成快捷键替换程序 }
{ }
{ wr960204(王锐) 2002-2-20 }
{ }
{ *************************************************************************** }
unit UnitNewKeyMap;
interface
uses Windows, Classes, SysUtils, Menus, ToolsAPI, Controls;
procedure Register;
implementation
type //把类写到implementation中免得不必要的访问
TBufferList = class(TNotifierObject, IUnknown, IOTANotifier,
IOTAKeyboardBinding)
function GetBindingType: TBindingType;
function GetDisplayName: string;
function GetName: string;
procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices);
protected
procedure CodeCompletion(const Context: IOTAKeyContext; KeyCode: TShortcut;
var BindingResult: TKeyBindingResult);
end;
procedure Register;
begin
(BorlandIDEServices as
IOTAKeyBoardServices).AddKeyboardBinding(TBufferList.Create);
end;
procedure TBufferList.BindKeyboard(const BindingServices:
IOTAKeyBindingServices);
begin
BindingServices.AddKeyBinding([ShortCut(VK_SPACE, [ssAlt])],
CodeCompletion, Pointer(csCodeList or csManual));
end;
procedure TBufferList.CodeCompletion(const Context: IOTAKeyContext;
KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
begin
(Context.EditBuffer.TopView as
IOTAEditActions).CodeCompletion(Byte(Context.Context));
BindingResult := krHandled;
end;
function TBufferList.GetBindingType: TBindingType;
begin
Result := btPartial;
end;
function TBufferList.GetDisplayName: string;
begin
Result := '代码自动完成解决方案';
end;
function TBufferList.GetName: string;
begin
Result := 'NewKeyMap';
end;
end.
好了把它加入到一个包中,编译并安装。
切换到代码编辑,按以下Alt+Space看看有什么效果。再也不用修改系统输入法的热键了