Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
ВнизRichedit Найти похожие ветки
← →
msdn1 (2002-10-13 15:04) [0]Добрый день уважаемые. Написал пр-ру которая «красит» HTML тэги в Richedit. Но она работает слишком медленно. Как ускорить? Существуют ли альтернативные подходы?
var
s,s1,s2:string;
i,j,k,n,l,selstar,p,t:integer;
first,wrong:bool;
a:array[1..44]of string;
begin
form1.Caption:=datetostr(time);
a[1]:="body";
a[2]:="html";
a[3]:="head";
a[4]:="title";
a[5]:="meta";
a[6]:="p";
a[7]:="a";
a[8]:="link";
a[9]:="strong";
a[10]:="h1";
a[11]:="h2";
a[12]:="h3";
a[13]:="h4";
a[14]:="h5";
a[15]:="h6";
a[16]:="font";
a[17]:="center";
a[18]:="input";
a[19]:="table";
a[20]:="map";
a[21]:="tr";
a[22]:="td";
a[23]:="b";
a[24]:="i";
a[25]:="img";
a[26]:="area";
a[27]:="li";
a[28]:="br";
a[29]:="pre";
a[30]:="hr";
a[31]:="code";
a[32]:="!DOCTYPE";
a[33]:="span";
a[34]:="ul";
a[35]:="small";
a[36]:="th";
a[37]:="dd";
a[38]:="dt";
a[39]:="em";
a[40]:="ol";
a[41]:="frames";
a[42]:="noframes";
a[43]:="style";
a[44]:="script";
selstar:=richedit1.SelStart;
richedit1.SelectAll;
richedit1.SelAttributes.Color:=clblack;
s:=richedit1.Text;
if length(s)>0 then
begin
for i:=0 to length(s) do
begin
if s[i]="<" then
begin
j:=i;
k:=0;
while (j<>length(s))and(s[j]<>">")do
begin
inc(j);
inc(k);
end;
richedit1.SelStart:=i-1;
richedit1.SelLength:=k+1;
richedit1.SelAttributes.Color:=clblue;
s1:=richedit1.SelText;n:=1;s2:="";first:=false;t:=1;
for t:=1 to length(s1)do
begin
if (s1[t]<>" ")and (s1[t]<>"<") then break;
end;
n:=t-1;
//form1.caption:=inttostr(t);
while (n+1<>length(s1))and(s1[n+1]<>" ")and(s1[n+1]<>">")do
begin
if (first=false)and(s1[n]<>" ")then
begin
first:=true;wrong:=true;
l:=n;
end;
inc(n);
if s1[n]<>" "then s2:=s2+s1[n];
end;
for p:=low(a)to high(a)do
begin
if (a[p]=s2)or(AnsiUpperCase(a[p])=s2)or("/"+a[p]=s2)or("/"+AnsiUpperCase(a[p])=s2) then
begin
wrong:=false;
break;
end;
end;
if wrong=true then
begin
if t=2 then begin
richedit1.SelStart:=i+l-1;
richedit1.SelLength:=length(s2);
richedit1.SelAttributes.Color:=clred; end else
begin
richedit1.SelStart:=i+l-2;
richedit1.SelLength:=length(s2);
richedit1.SelAttributes.Color:=clred;
end;
end;
end;
end;
end;
richedit1.SetFocus;
richedit1.SelStart:=selstar;
end;
← →
alxx (2002-10-13 15:57) [1]Может просто отключать прорисовку на время раскрашивания - мигать не будет и время сэкономится
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c