研究心得------->解决Delphi的Code Completion与中文操作系统输入法的冲突兼谈OPENToolsAPI(0分)

  • 主题发起人 主题发起人 wr960204
  • 开始时间 开始时间
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重装也没什么。
 
其实可以通过修改注册表,让一个ctrl+空格为代码完成,
另一个ctrl+空格为输入法切换
修改HKEY_CURRENT_USER/Control Panel/Input Method/Hot Keys/00000010
中的Key Modifiers 由02,C0,00,00改为02,40,00,00
这样左ctrl+空格就成了代码完成,右ctrl+空格用来输入法切换
改成02,80,00,00 右ctrl+空格 代码完成,左ctrl+空格 用来输入法切换
 
toolsapi不错
 
后退
顶部