Delphi Ctrl+Space生效方法

来源:互联网 发布:微信js config fail 编辑:程序博客网 时间:2024/05/09 04:25

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

另外可以自己定义快捷方式

改成Ctrl+U了。下面是代码~
{ *************************************************************************** }
{                                                                             }
{ 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.

原创粉丝点击