찾는 문자열은 입력한뒤 richedit에서 해당하는 문자열만 색을 바꿔주려구 하는데요..
M_contents.SelStart := Pos(Find_Text, sub_Text);
M_contents.SelLength := Length(Find_Text);
M_contents.SelAttributes.color := clRed;
M_contents.DefAttributes.color := clBlack;
selstart가 0이 아닐때는 색이 잘 바뀌는데요..
0일때는 색은 안바뀌고 Highlight만 되거든요..
방법이 없을까요?
Pos스트링 함수는 -1를 해보세요
procedure TForm1.Button2Click(Sender: TObject);
var
cPre, cNew : String;
nPos : Integer;
begin
cPre := 'Rich';
nPos := Editor.FindText(cPre, Editor.SelStart, Length(Editor.Text), [stMatchCase]);
//nPos := Pos(cPre, Editor.Text)-1;
if nPos <> -1 then begin
Editor.SelStart := nPos;
Editor.SelLength := Length(cPre);
Editor.SelAttributes.color := clRed;
Editor.DefAttributes.color := clBlack;
end;
end;
아래 예는 모든 문자를 바꾸는 예입니다.
procedure TForm1.Button1Click(Sender: TObject);
var
cPre, cNew : String;
nPos : Integer;
TA : TTextAttributes;
begin
cPre := 'Rich';
cNew := '홍성락';
while FindStr(cPre) do begin
//Editor.SelStart := Editor.SelStart+1;
//Editor.SelLength := Length(cPre)-1;
//TA := Editor.SelAttributes;
Editor.SelText := cNew;
//Editor.SelStart := Editor.SelStart-Length(cNew);
//Editor.SelLength := Length(cNew);
//Editor.SelAttributes := TA;
end;
end;
function TForm1.FindStr(str:string):Boolean;
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
Result := False;
with Editor do begin
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(str, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(str);
Result := True;
end;
end;
end;
hsr/////////////////////////////////////////////////////////