c++builder 代码输入助手

 指针箭头、指针符号-> 输入太麻烦

java、c#、delphi 语言里,输入一个字符点.就可以弹出代码提示窗口。很是方便。

c++语言,输入->,需要按3个键才可以弹出,能否输入一个字符自动替换为->呢,如此就方便输入了。

比如:输入一个字符'自动替换为c++的指针符号->

那么代码输入编写速度提高很多,找一个不常用的字符按键代替这3个输入的。

cnpack>ide enhancements>setttings>editor enhancement>other>

auto input matched bracket and quote {} () "" ''

通过这个选项,可以自动输入后面的字符,能否实现呢?

CnSrcEditorEnhance>chkAutoBracket

 

 

btQuote:
    begin
     CnOtaMovePosInCurSource(ipCur, 0, -1); //-1
     CnOtaEditDelete(1);
     CnOtaInsertTextToCurSource('->'); //''''
     end;
    btDitto:   CnOtaInsertTextToCurSource('"');
  end;


  CnOtaMovePosInCurSource(ipCur, 0, 0); //-1   

 输入'

删除',插入->

功能已经实现,如何弹出代码提示框呢?

alt+Space 激活弹出代码提示窗口,是发消息还是参考cnpack输入2个字符激活代码提示窗口呢?

1、2个字符弹出的是cnpack的窗口。不合适。

2、cnpack>Editor Enhancements settings>Code Editor>Add a CodeCompletion HotKey (Alt+Space),看看这个快捷键如何调用invoke激活代码输入助手的。

 

最终借助方法2找到解决方法了。

调用IOTAEditActions的CodeCompletion方法,弹出代码提示窗口,代码自动完成功能!

change code cnwizards\Source\SrcEditorEnhance\CnSrcEditorKey.pas

 编译后的dll放到

D:\Program Files (x86)\CnPack\CnWizards

procedure TCnSrcEditorKey.ExecuteInsertCharOnIdle(Sender: TObject);
var
  EditView: IOTAEditView;
  awinControl:TWinControl;
begin
  if (FAutoMatchType = btNone) or (FRepaintView = 0) then
    Exit;
   EditView := CnOtaGetTopMostEditView;
  case FAutoMatchType of
    btBracket: CnOtaInsertTextToCurSource(')');
    btSquare:  CnOtaInsertTextToCurSource(']');
    btCurly:   CnOtaInsertTextToCurSource('}');
    btQuote:
    begin
      if   IsCpp(    EditView.Buffer.FileName )   then
      begin
           CnOtaMovePosInCurSource(ipCur, 0, -1); //-1
           CnOtaEditDelete(1);

           awinControl:=CnOtaGetCurrentEditControl;
           PostMessage(awinControl.Handle,WM_KEYDOWN,VK_RETURN,0);
           PostMessage(awinControl.Handle,WM_KEYUP,VK_RETURN,0);
           IOTAEditView(FRepaintView).Paint;
           Application.ProcessMessages;

           CnOtaInsertTextToCurSource('->'); //ksr   ''''
      end
      else
            CnOtaInsertTextToCurSource('''');
     end;
    btDitto:   CnOtaInsertTextToCurSource('"');
  end;


  if (FAutoMatchType = btQuote) and  IsCpp(    EditView.Buffer.FileName )  then
  begin
     CnOtaMovePosInCurSource(ipCur, 0, 0); //-1   ksr

    if Assigned(EditView) then
      (EditView as IOTAEditActions).CodeCompletion(csCodeList or csManual);
  end
  else
    CnOtaMovePosInCurSource(ipCur, 0, -1);

  IOTAEditView(FRepaintView).Paint;
end;
View Code

 

 真正输入字符 ' 的时候把auto input matched bracket and quote功能关掉就可以了。

爽!

c++builder的福音啊!!!

 

能否连续按'在弹出助手界面再输入'能弹出当前选择的行,再输入'能选择当前行并关闭当前助手界面再继续根据选择又弹出助手界面,连续性??

先发送个esc键。

ShowIDECodeCompletion

 

http://docwiki.embarcadero.com/RADStudio/XE8/en/Code_Insight
http://docwiki.embarcadero.com/RADStudio/XE8/en/Code_Completion
http://edn.embarcadero.com/article/27913
http://delphi.about.com/od/beginners/l/aa051203a.htm
http://codeverge.com/embarcadero.delphi.ide/delphi-xe-code-insight/1057944

posted on 2015-07-25 17:58  lypzxy  阅读(1118)  评论(0编辑  收藏  举报