本帖最后由 小白龙 于 2023-4-5 14:13 编辑
回复 11# jyswjjgdwtdtj
感谢指导, 还是搞不定,
上面的代码出自下面的链接
https://blog.csdn.net/yntcsb/article/details/83570675- int pos = SendEditor(SCI_GETCURRENTPOS); //取得当前位置
- int line = SendEditor(SCI_LINEFROMPOSITION,pos); //取得当前行
- //如果最后输入的字符是右括号的话就自动让当前行缩进和它匹配的左括号所在行一致
- if( strchr("})>]",LastProcessedChar) &&
- isspace(SendEditor(SCI_GETCHARAT,pos-2)) && //要求右括号左边是空白字符
- LastProcessedChar!=0)
- {
- //找前一个单词起始位置,这里用它来确定右括号左边是否全是空白字符
- int startpos = SendEditor(SCI_WORDSTARTPOSITION,pos-1,false);
- int linepos = SendEditor(SCI_POSITIONFROMLINE,line); //当前行起始位置
- if(startpos == linepos) //这样相当于判断右括号左边是否全是空白字符
- {
- int othpos = SendEditor(SCI_BRACEMATCH,pos-1); //得到对应的左括号所在的位置
- int othline = SendEditor(SCI_LINEFROMPOSITION,othpos); //左括号所在行
- int nIndent = SendEditor(SCI_GETLINEINDENTATION,othline);//左括号所在行的缩进值
- // 替换右括号前面的空白字符,使之与左括号缩进一致
- char space[1024];
- memset(space,' ',1024);
- SendEditor(SCI_SETTARGETSTART, startpos);
- SendEditor(SCI_SETTARGETEND, pos-1);
- SendEditor(SCI_REPLACETARGET,nIndent,(sptr_t)space);
- }
- }
- // 如果输入的是回车,则保持与上一行缩进一致
- // 如果上一行最后有效字符为左括号,就多缩进四个空格
- if(LastProcessedChar == ' ')
- {
- if(line > 0)
- {
- // 得到上一行缩进设置
- int nIndent = SendEditor(SCI_GETLINEINDENTATION,line-1);
- // 查找上一行最后一个有效字符(非空白字符)
- int nPrevLinePos = SendEditor(SCI_POSITIONFROMLINE,line-1);
- int c = ' ';
- for(int p = pos-2;
- p>=nPrevLinePos && isspace(c);
- p--, c=SendEditor(SCI_GETCHARAT,p));
- // 如果是左括号,就多缩进四格
- if(c && strchr("{([<",c)) nIndent+=4;
- // 缩进...
- char space[1024];
- memset(space,' ',1024);
- space[nIndent] = 0;
- SendEditor(SCI_REPLACESEL, 0, (sptr_t)space);
- }
- }
复制代码
|