線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:10029
推到 Plurk!
推到 Facebook!

Keyboard binding 的應用--改變程式碼自動完成的 Hot-key

 
sryang
尊榮會員


發表:38
回覆:737
積分:865
註冊:2002-06-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-12 12:51:23 IP:219.81.xxx.xxx 未訂閱
在 Delphi 中,程式碼自動完成的功能分為兩個部分 第一部份是當我們輸入一個物件的名稱之後,按「.」就出現一個列表供我們選擇這個物件可用的屬性或方法名稱 第二部份是當我們輸入部分常數、變數或函數的名稱之後,按一個熱鍵,就出現一個列表供我們選擇字首相符的常數、變數或函數 可是,第二部分的熱鍵,預設是 Ctrl-Space,這剛好跟切換中文輸入法的熱鍵衝突 所以,應用 Keoboard binding,我們可以改變這個熱鍵 程式如下:   

unit unCodeCompleteKeyBinding;

interface

procedure Register;

implementation

uses Windows, Classes, SysUtils, ToolsAPI, Menus, Forms, Dialogs, Controls,
ActiveX;

type
TWCodeCompleteKeyBinding = class(TNotifierObject, IUnknown, IOTANotifier,
IOTAKeyboardBinding)
procedure CodeCompleteProc(const Context: IOTAKeyContext; KeyCode: TShortCut;
var BindingResult: TKeyBindingResult);
function GetBindingType: TBindingType;
function GetDisplayName: string;
function GetName: string;
procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices);
end;

procedure Register;
begin
(BorlandIDEServices as IOTAKeyBoardServices).AddKeyboardBinding(TWCodeCompleteKeyBinding.Create);
end;

{ TWCodeCompleteKeyBinding }

procedure TWCodeCompleteKeyBinding.BindKeyboard(
const BindingServices: IOTAKeyBindingServices);
begin
BindingServices.AddKeyBinding([ShortCut(VK_RIGHT, [ssAlt])], CodeCompleteProc, nil);
end;

procedure TWCodeCompleteKeyBinding.CodeCompleteProc(
const Context: IOTAKeyContext; KeyCode: TShortCut;
var BindingResult: TKeyBindingResult);
begin
(Context.EditBuffer.TopView as IOTAEditActions).CodeCompletion(Byte(Context.Context));
BindingResult := krHandled;
end;

function TWCodeCompleteKeyBinding.GetBindingType: TBindingType;
begin
Result := btPartial;
end;

function TWCodeCompleteKeyBinding.GetDisplayName: string;
begin
Result := '改Code Complete熱鍵為 Alt-向右';
end;

function TWCodeCompleteKeyBinding.GetName: string;
begin
Result := 'ChangeCodeComplete';
end;

end.


將這個 unit 存檔,用一個 package 包起來,然後 compile、install 就 OK 了,這樣寫起程式來就更快了 例如,要輸入 ShowMessage,只要輸入前幾個字,然後按 Alt-→ 就會出現一個列表供你選擇,希望對大家有幫助。 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2007-09-07 10:08:09, 註解 無‧
sryang 重新編輯於 2007-09-07 10:09:27, 註解 無‧
sryang 重新編輯於 2007-09-07 10:10:42, 註解 無‧
sryang 重新編輯於 2007-09-07 10:12:05, 註解 無‧
sryang 重新編輯於 2007-09-07 10:13:16, 註解 無‧
阿子
站務副站長


發表:120
回覆:230
積分:201
註冊:2002-03-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-12 14:53:13 IP:220.130.xxx.xxx 未訂閱
在這小弟在提供另一種方式.. 因小弟用習慣 Ctrl-Space 的hot-key 但又不想在IDE中掛多餘的bpl,所以就直接修改windows 的設定,使得windows 在左邊的Ctrl-Space 是不會切換中文輸入法,而右邊的Ctrl-Space 才是切換中文輸入法 所以在Delphi IDE 就可以使用自動完成的功能。 如何修改呢? 請看下方。
//這是將 keyborad 左邊的 Ctrl   Space 關掉, 但右邊的 Ctrl   Space 還是可以中/英切換.    {Windows Registry Editor Version 5.00    [HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys]    [HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000010]
     "Key Modifiers"=hex:02,40,00,00
[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000070]
     "Key Modifiers"=hex:02,40,00,00    
以上只能在 Windows 2k 以上才可以 從思考取勝一切~q
------
從思考取勝一切~q
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-31 10:51:23 IP:218.163.xxx.xxx 訂閱
補充:

使得windows 在右邊的Ctrl-Space 是不會切換中文輸入法,而左邊的Ctrl-Space 仍可切換中文輸入法

[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000010]
     "Key Modifiers"=hex:02,80,00,00
[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000070]
     "Key Modifiers"=hex:02,80,00,00

===================引 用 阿子 文 章===================
在這小弟在提供另一種方式.. 因小弟用習慣 Ctrl-Space 的hot-key 但又不想在IDE中掛多餘的bpl,所以就直接修改windows 的設定,使得windows 在左邊的Ctrl-Space 是不會切換中文輸入法,而右邊的Ctrl-Space 才是切換中文輸入法
所以在Delphi IDE 就可以使用自動完成的功能。 如何修改呢? 請看下方。
//這是將 keyborad 左邊的 Ctrl   Space 關掉, 但右邊的 Ctrl   Space 還是可以中/英切換.

{Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys]

[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000010]
     "Key Modifiers"=hex:02,40,00,00
[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000070]
     "Key Modifiers"=hex:02,40,00,00


以上只能在 Windows 2k 以上才可以

從思考取勝一切~q
系統時間:2017-07-22 2:47:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!