안녕하세요. 허접 Delphi 개발자 누룽지 입니다.^^
각설하고 제가 TRichedit를 이용하여 Code Editor를 만들려 하는데
Syntax에 대하여 Font 색과 스타일 변환을 하려고 Function을 아래와같이 만들었습니다.
원하는 동작은 정상적으로 하는데 문제는 속도가 너무 느리다는 겁니다 ㅠㅠ.
속도 문제를 해결할 방법은 없을까요?
도와주시면 회사와 인류발전에 이바지 하겠습니다 ^^
function FnFontChange(IRedit : TRichedit) : boolean;
var
FoundAt, ii, StartPos, str_Length : Integer;
sSyntax : TstringList;
begin
sSyntax := TStringList.Create;
sSyntax.Add('HTML') ;
sSyntax.Add('head') ;
sSyntax.Add('title') ;
sSyntax.Add('style') ;
sSyntax.Add('type') ;
sSyntax.Add('meta') ;
sSyntax.Add('font') ;
sSyntax.Add('size') ;
sSyntax.Add('height') ;
sSyntax.Add('color') ;
sSyntax.Add('border') ;
sSyntax.Add('center') ;
sSyntax.Add('body') ;
sSyntax.Add('table') ;
sSyntax.Add('span') ;
sSyntax.Add('ROWSPAN') ;
sSyntax.Add('COLSPAN') ;
sSyntax.Add('SCRIPT') ;
sSyntax.Add('label') ;
sSyntax.Add('div') ;
sSyntax.Add('tr') ;
sSyntax.Add('td') ;
try
for ii := 0 to sSyntax.Count-1 do
begin
IRedit.SelStart := 0;
repeat
StartPos := IRedit.SelStart;
str_Length := Length(IRedit.Text) - StartPos;
FoundAt := IRedit.FindText(sSyntax[ii], StartPos, str_Length, [stMatchCase]);
if FoundAt <> -1 then
begin
SetFocus;
IRedit.SelStart := FoundAt;
IRedit.SelLength := Length(sSyntax[ii]);
IRedit.SelAttributes.Color := clBlue;
IRedit.SelAttributes.Style := [fsBold];
IRedit.SelStart := IRedit.SelStart + IRedit.SelLength;
end;
until FoundAt < 0;
end;
except
Result := False;
end;
end;
RichEdit 의 Lines.BeginUpdate 와 EndUpdate 를 사용하시면
조금은 향상이 있을거 같습니다..