• c++builder 代码输入助手


    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 cnwizardsSourceSrcEditorEnhanceCnSrcEditorKey.pas

     编译后的dll放到

    D:Program Files (x86)CnPackCnWizards

    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

  • 相关阅读:
    MDK(keil)4.7中文注释乱码解决
    小型功率放大器的设计与制作
    增强输出的电路
    晶体管电路设计学习笔记(一)
    MOSFET学习
    sysTick系统定时器
    C#面向对象 什么是面向对象
    JS基础 超链接、数列的用法,行内元素和块级元素
    JS基础 常用函数、事件、阻止事件冒泡
    JS基础 定时器【setTimeout、setInterval、clearInterval 】
  • 原文地址:https://www.cnblogs.com/cb168/p/4676309.html
Copyright © 2020-2023  润新知