真情放送150: 如何根据richedit 的行号使该行变色(100分)

  • 主题发起人 主题发起人 hadyq
  • 开始时间 开始时间
H

hadyq

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是我的程序,使用后可以使该行变色,但是有时变色的范围包括下一行的前一俩个字
(似乎是在要变色的那行字没有全满的时候发生, richedit中的文本是在记事本中输入的,
都没有输入回车换行)。
str_temp:=richedit1.lines[行号];
startpos:=0;
toend:=length(richedit1.text);
FoundAt := richedit1.FindText(str_temp, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
str_temp2:=trimright(str_temp);
richedit1.SelStart := FoundAt;
richedit1.SelLength := Length(str_temp2);
richedit1.selattributes.color:=clblack;
end;
 
关注,但可能分数太少了,,
 
如果想把第4行变为红色,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
l,l1:lresult;
begin
l:=sendmessage(richedit1.handle,em_lineindex,3,0);
l1:=sendmessage(richedit1.handle,em_lineindex,4,0);
richedit1.selstart:=l;
richedit1.SelLength:=l1-l;
richedit1.SelAttributes.Color:=clred;
richedit1.SelLength:=0;
end;
 
做一个过程吧

procedure ChangeREColor(RE:TRichEdit;LineNumber:Integer;C:TColor);
var Str:String;
begin
RE.SelStart:=RE.Perform(EM_LINEINDEX,LineNumber-1,0);
RE.SelLength:=length(RE.Lines[LineNumber-1]);
RE.SelAttributes.Color:=C;
RE.SelStart:=0;
end;

你的问题在于findtext,不能用这个东西找行,如果两行内容相同,你永远找不到第二行了
 
多人接受答案了。
 
后退
顶部