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;
真正输入字符 ' 的时候把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