procedure SubScript(var RichEdit:TRichEdit); //设置下标
begin
If Pos('$$$',RichEdit.Text)<>0 Then
Begin
RichEdit.Font.Size:=12;
RichEdit.SelStart:=Pos('$$$',RichEdit.Text)+Length('$$$')-1;
RichEdit.SelLength:=Pos('@@@',RichEdit.Text)-Length('$$$')-Pos('$$$',RichEdit.Text);
RichEdit.SelAttributes.Size:=9;
RichEdit.SelStart:=Pos('$$$',RichEdit.Text)-1; //剪切掉'$$$'
Richedit.SelLength:=Length('$$$');
RichEdit.ClearSelection;
RichEdit.SelStart:=Pos('@@@',RichEdit.Text)-1; //剪切掉'@@@'
Richedit.SelLength:=Length('@@@');
RichEdit.ClearSelection;
if Pos('$$$',RichEdit.Text)<>0 then
SubScript(RichEdit);
end;
end;
在RichEdit的Text把$$$和@@@中间的字符变成下标(然后去掉他们),怎么老是死机,提示栈满请大虾们帮帮忙
begin
If Pos('$$$',RichEdit.Text)<>0 Then
Begin
RichEdit.Font.Size:=12;
RichEdit.SelStart:=Pos('$$$',RichEdit.Text)+Length('$$$')-1;
RichEdit.SelLength:=Pos('@@@',RichEdit.Text)-Length('$$$')-Pos('$$$',RichEdit.Text);
RichEdit.SelAttributes.Size:=9;
RichEdit.SelStart:=Pos('$$$',RichEdit.Text)-1; //剪切掉'$$$'
Richedit.SelLength:=Length('$$$');
RichEdit.ClearSelection;
RichEdit.SelStart:=Pos('@@@',RichEdit.Text)-1; //剪切掉'@@@'
Richedit.SelLength:=Length('@@@');
RichEdit.ClearSelection;
if Pos('$$$',RichEdit.Text)<>0 then
SubScript(RichEdit);
end;
end;
在RichEdit的Text把$$$和@@@中间的字符变成下标(然后去掉他们),怎么老是死机,提示栈满请大虾们帮帮忙
解决方案 »
- TOraQuery Ehlib 实现自动排序的字段排序
- delphi编译报错
- 为什么英文版xp下运行软件,软件里面的字全变成??了?
- 我把参数传到一个prodedure 去执行,可是出错了,我看了好几遍了,大家帮忙
- API怎么转换成DELP的函数格式
- 请问一下扩展名为DBD的数据库文件是什么类型的数据库呀,用Delphi怎样读这种类型的数据库?
- string只能保存255个字符,什么类型可以保存更多呢???
- 程序结构bde+odbc+access,机器用英文98format后,每装任何软件,程序执行出错,
- 长沙要delphi的人多吗
- dbgrid有没有一个当前记录移动时的事件?名字应该叫beforenext 或是什么把
- ICS或Indy如何获取到asp.net程序的session值
- DBComboBox问题
如果richedit的内容有太多的$$$,那么SubScript会一直嵌套调用下去,而函数每调用一次就会占用一下堆栈。而堆栈的空间是有限的,虽然可以在options中设置堆栈大小,不过这样的调用方法就是设置的再大也有不够的时候。建议楼主使用while循环,估计能够解决问题。
另外,Pos('$$$',RichEdit.Text) 判断,如果内容太多是否效率会太低了。不如使用临时变量扫描吧。