Подсветка
var nsc,ToEnd,FoundAt,StartPos,f1,f2:integer;
npoint:TPoint;
begin
npoint:=CodeEdit.CaretPos;
nsc:=SC;
nottochange:=true;
with CodeEdit do begin
FoundAt:=0;
StartPos:=0;
ToEnd:=0;
SelLength:=0;
StartPos:=0;
zastavka.HowManyTime.Caption:='';
zastavka.Status.Caption:='Ïðîðèñîâêà...';
zastavka.Progress.MaxValue:=nSC*3;
zastavka.Progress.Progress:=0;
Repeat
zastavka.Progress.Progress:=StartPos;
Application.ProcessMessages;
ToEnd:=Length(Text)-StartPos;
FoundAt:=FindText('<', StartPos, ToEnd, [stMatchCase]);
f1:=foundat;
SelStart:=FoundAt;
StartPos:=SelStart+1;
ToEnd:=Length(Text)-StartPos;
FoundAt:=FindText('>', StartPos, ToEnd, [stMatchCase]);
f2:=foundat;
if FoundAt<>-1 then begin
SelLength:=FoundAt-SelStart+1;
SelAttributes.Color:=clred;
SelAttributes.Style:=[fsbold];
end;
StartPos:=FoundAt+1;
until (f1=-1) or (f2=-1);
FoundAt:=0;
StartPos:=0;
ToEnd:=0;
SelLength:=0;
StartPos:=0;
Repeat
zastavka.Progress.Progress:=nSC+(StartPos);
Application.ProcessMessages;
ToEnd:=Length(Text)-StartPos;
FoundAt:=FindText('"', StartPos, ToEnd, [stMatchCase]);
f2:=FoundAt;
SelStart:=FoundAt;
StartPos:=SelStart+1;
ToEnd:=Length(Text)-StartPos;
FoundAt:=FindText('"', StartPos, ToEnd, [stMatchCase]);
f1:=FoundAt;
if FoundAt<>-1 then begin
SelLength:=FoundAt-SelStart+1;
SelAttributes.Color:=$000080FF;
SelAttributes.Style:=[fsitalic];
end;
StartPos:=FoundAt+1;
until (f1=-1) or (f2=-1);
FoundAt:=0;
StartPos:=0;
ToEnd:=0;
SelLength:=0;
StartPos:=0;
Repeat
zastavka.Progress.Progress:=(2*nSC)+(StartPos);
Application.ProcessMessages;
ToEnd:=Length(Text)-StartPos;
FoundAt:=FindText('<!', StartPos, ToEnd, [stMatchCase]);
f1:=FoundAt;
SelStart:=FoundAt;
StartPos:=SelStart+2;
ToEnd:=Length(Text)-StartPos;
FoundAt:=FindText('>', StartPos, ToEnd, [stMatchCase]);
f2:=FoundAt;
if FoundAt<>-1 then begin
SelLength:=FoundAt-SelStart+2;
SelAttributes.Color:=clgray;
SelAttributes.Style:=[fsunderline];
end;
StartPos:=FoundAt+1;
until (f1=-1) or (f2=-1);
CaretPos:=npoint;
end;
end;
Но эта фигня страшно тормозит. Есть какие-нибудь предложения по оптимизации?
ЗЫ. если в цикле проворачивать по каждому символу, то вылезают глюки - CodeEdit имеет тип TRichEdit, и у него текст - в формате rtf со всеми возможными скрытыми символами
Я организовал выделение цветом различных элементов (заключённых в '<...>', '"..."', '<!...>') следующим образом:
...
Но эта фигня страшно тормозит. Есть какие-нибудь предложения по оптимизации?
ЗЫ. если в цикле проворачивать по каждому символу, то вылезают глюки - CodeEdit имеет тип TRichEdit, и у него текст - в формате rtf со всеми возможными скрытыми символами
Есть готовый компонент для разного рода подстветки текста: SynEdit.
Есть готовый компонент для разного рода подстветки текста: SynEdit.
1)У меня Delphi 7
2)Если его можно где-то скачать, кинь ссылку, пожалуйста
1)У меня Delphi 7
2)Если его можно где-то скачать, кинь ссылку, пожалуйста
Собственно это целый пакет.
Версия 1.1:
http://www.torry.net/vcl/edits/enh/ossynedit.zip (829 Кб)
На официальном сайте несколько версий:
http://synedit.sourceforge.net/download.php
P.S. Правда моя старая версия 1.0 со всеми примерами и под разные delphi (до шестой) весит 14 Мб...
не работает
Во втором варианте не ставится пакет
не работает
Во втором варианте не ставится пакет
В смысли не ставится? не компилируется или битый файл?
Если не компилируется - то напиши, на что именно Delphi ругается (желательно с куском кода). У меня на седьмую не ставился, я там что-то в исходнике поменял и все стало нормально (что - не помню, давно это было).
Если битый файл - yandex.ru, google.com всегда работают. Не могу же я свои 14 Мб выложить...
У меня на седьмую не ставился, я там что-то в исходнике поменял и все стало нормально
Глюк в чём - он не находит какой-то там unit, я и сам, честно говоря, его не нашёл; если его закомментарить, не находит тип TЧёртЗнаетКакойFont. У меня щас его при себе нету, дома Инет кончился, приходится писать откуда получится :(