Delphi 6安装完成后,用update2升级之后,如果ctrl+space无用,则可以在
[HKEY_CURRENT_USER/Control Panel/Input Method/Hot Keys/]下就00000010或其它的输入法将其
"Key Modifiers"改成hex:02,40,00,00即可...
如果未打update2升级,可以用如下代码处理:
//Uint pas
unit CodeCompletionSettingsU;
interface
uses
Registry,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ColorGrd, StdCtrls;
type
TMainForm = class(TForm)
grdColour: TColorGrid;
btnApply: TButton;
btnClose: TButton;
lstElement: TListBox;
Label1: TLabel;
Label2: TLabel;
chkAutoParens: TCheckBox;
Label3: TLabel;
memExtraUnits: TMemo;
btnDefaultExtraUnits: TButton;
procedure FormCreate(Sender: TObject);
procedure lstElementClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnApplyClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure grdColourChange(Sender: TObject);
procedure btnDefaultExtraUnitsClick(Sender: TObject);
private
{ Private declarations }
public
Reg: TRegIniFile;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
type
TColourSetting = record
Desc, Ident, Default, NewColour: String;
end;
var
ColourSettings: array[0..8] of TColourSetting =
((Desc: 'Property'; Ident:'PropSymbolColor'; Default: 'clNavy'),
(Desc: 'Variable'; Ident:'VarSymbolColor'; Default: 'clMaroon'),
(Desc: 'Constant'; Ident:'ConstSymbolColor'; Default: 'clGreen'),
(Desc: 'Type'; Ident:'TypeSymbolColor'; Default: 'clOlive'),
(Desc: 'Procedure'; Ident:'ProcSymbolColor'; Default: 'clTeal'),
(Desc: 'Function'; Ident:'FuncSymbolColor'; Default: 'clBlue'),
(Desc: 'Unit'; Ident:'UnitSymbolColor'; Default: 'clBlack'),
(Desc: 'Label'; Ident:'LabelSymbolColor'; Default: 'clTeal'),
(Desc: 'Abstract method'; Ident: 'AbstractSymbolColor'; Default: 'clRed'));
const
RegPath = 'Software/Borland/Delphi/6.0';
RegSection = 'Code Insight';
RegAutoParensSetting = 'CodeCompleteAutoParens';
RegExtraUnitsSetting = 'ExtraUnits';
DefaultExtraUnits = 'Classes;ComConst;ComObj;ComServ;Contnrs;ConvUtils;DateUtils;HelpIntfs;IniFiles;MaskUtils;Masks;Math;MtsObj;RTLConsts;Registry;StdConvs;StdVCL;StrUtils;SyncObjs;TypInfo;VCLCom;VarCmplx;VarConv;ShareMem;SysConst;SysUtils;Types;VarUtils;Variants';
procedure TMainForm.FormCreate(Sender: TObject);
var
I: Integer;
S: String;
begin
Reg := TRegIniFile.Create(RegPath);
//Read auto-parentheses setting and update checkbox
chkAutoParens.Checked := Reg.ReadBool(RegSection,
RegAutoParensSetting, True);
//Set up listbox
for I := Low(ColourSettings) to High(ColourSettings) do
lstElement.Items.Add(ColourSettings[I].Desc);
//Select first item
lstElement.ItemIndex := 0;
//and pretend the user clicked it, to get the colour shown
lstElementClick(lstElement);
//Read the ExtraUnits value, separating units into separate lines
S := Reg.ReadString(RegSection, RegExtraUnitsSetting, '');
memExtraUnits.Lines.Text := StringReplace(S, ';', #13#10, [rfReplaceAll])
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
Reg.Free;
end;
procedure TMainForm.lstElementClick(Sender: TObject);
var
CurrentColourStr: String;
CurrentColour: TColor;
begin
//Read selected item colour from registry
with ColourSettings[lstElement.ItemIndex] do
CurrentColourStr := Reg.ReadString(RegSection, Ident, Default);
//Set colour on colour grid
CurrentColour := StringToColor(CurrentColourStr);
grdColour.ForegroundIndex := grdColour.ColorToIndex(CurrentColour)
end;
procedure TMainForm.btnApplyClick(Sender: TObject);
var
I: Integer;
begin
//Write all changed colours to the registry
for I := Low(ColourSettings) to High(ColourSettings) do
with ColourSettings[I] do
if NewColour <> '' then
Reg.WriteString(RegSection, Ident, NewColour);
//Write auto-parentheses setting to the registry
Reg.WriteBool(RegSection, RegAutoParensSetting,
chkAutoParens.Checked);
//Write Extra Units to registry, separated by semicolons
Reg.WriteString(RegSection, RegExtraUnitsSetting,
StringReplace(Trim(memExtraUnits.Lines.Text), #13#10, ';', [rfReplaceAll]));
end;
procedure TMainForm.btnCloseClick(Sender: TObject);
begin
Close
end;
procedure TMainForm.grdColourChange(Sender: TObject);
begin
//When user clicks on new colour, store it in array
ColourSettings[lstElement.ItemIndex].NewColour :=
ColorToString(grdColour.ForegroundColor)
end;
procedure TMainForm.btnDefaultExtraUnitsClick(Sender: TObject);
begin
memExtraUnits.Lines.Text :=
StringReplace(DefaultExtraUnits, ';', #13#10, [rfReplaceAll])
end;
end.
///unit form
object MainForm: TMainForm
Left = 365
Top = 164
Width = 302
Height = 432
Caption = 'Code Completion Settings'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 16
Top = 8
Width = 41
Height = 13
Caption = '&Element:'
FocusControl = lstElement
end
object Label2: TLabel
Left = 144
Top = 8
Width = 33
Height = 13
Caption = '&Colour:'
FocusControl = grdColour
end
object Label3: TLabel
Left = 16
Top = 160
Width = 176
Height = 13
Caption = 'E&xtra units searched with Ctrl+Space:'
FocusControl = memExtraUnits
end
object grdColour: TColorGrid
Left = 144
Top = 24
Width = 128
Height = 128
BackgroundEnabled = False
TabOrder = 0
OnChange = grdColourChange
end
object btnApply: TButton
Left = 61
Top = 368
Width = 75
Height = 25
Caption = '&Apply'
Default = True
TabOrder = 1
OnClick = btnApplyClick
end
object btnClose: TButton
Left = 157
Top = 368
Width = 75
Height = 25
Cancel = True
Caption = '&Close'
TabOrder = 2
OnClick = btnCloseClick
end
object lstElement: TListBox
Left = 16
Top = 24
Width = 113
Height = 129
ItemHeight = 13
TabOrder = 3
OnClick = lstElementClick
end
object chkAutoParens: TCheckBox
Left = 16
Top = 336
Width = 185
Height = 17
Caption = 'Automatically insert parentheses'
TabOrder = 4
end
object memExtraUnits: TMemo
Left = 16
Top = 176
Width = 201
Height = 153
ScrollBars = ssVertical
TabOrder = 5
end
object btnDefaultExtraUnits: TButton
Left = 224
Top = 176
Width = 49
Height = 25
Caption = '&Defaults'
TabOrder = 6
OnClick = btnDefaultExtraUnitsClick
end
end
另外可以自己定义快捷方式
{ *************************************************************************** }
{ }
{ Delphi 的IDE代码自动完成快捷键替换程序 UnitNewKeyMap.pas }
{ }
{ 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(Ord('U'), [ssCtrl])],
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.