Delphi Ctrl+Space生效方法

來源:互聯網
上載者:User

Delphi 6安裝完成後,用update2升級之後,如果ctrl+space無用,則可以在
[HKEY_CURRENT_USER/Control Panel/Input Method/Hot Keys/]下就00000010或其它的IME將其
"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.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.