Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

HTML - подсветка синтаксиса в TRichEdit, оптимизация.   Найти похожие ветки 

 
able ©   (2004-03-03 17:48) [0]

Здраствуйте, ув. Мастера! Я, для подстветки HTML тэгов использую следующую процедуру:
procedure HTMLSyntax(RichEdit: TRichEdit; TextCol,
 TagCol, DopCol: TColor);
var  
 i, iDop: Integer;
 s: string;
 Col: TColor;
 isTag, isDop: Boolean;
 a:Tpoint;
begin
 a:=RichEdit.CaretPos;
 iDop := 0;
 isDop := False;
 isTag := False;
 Col := TextCol;
 RichEdit.SetFocus;
 for i := 0 to Length(RichEdit.Text) do
 begin
   RichEdit.SelStart := i;
   RichEdit.SelLength := 1;
   s := RichEdit.SelText;
   if (s = "<") or (s = "{") then isTag := True;
   if isTag then
     if (s = """) then
       if not isDop then
       begin
         iDop  := 1;
         isDop := True;
       end
       else
         isDop := False;
   if isTag then
     if isDop then
     begin
       if iDop <> 1 then Col := DopCol;
     end
     else
       Col := TagCol
   else
     Col := TextCol;
   RichEdit.SelAttributes.Color := Col;
   iDop := 0;
   if (s = ">") or (s = "}") then isTag := False;
   RichEdit.CaretPos:=a;
 end;
 RichEdit.SelLength := 0;
end;
Всё бы хорошо, но когда загружаю HTML - file (пускай и не слишком большой) программка благополучно виснет. Может как-нить можно её оптимизировать? Заранее спасибо :)


 
TUser ©   (2004-03-03 18:26) [1]

1. for i := 1 to Length(RichEdit.Text) do
2. Для того чтобы получить символ - не надо его выделять. RichEdit1.text[i]
3. Все это лучщен оформить через case. В какой-нибудь переменной сохранять инфу о том, что мы сейчас пармим - таг, цитату или текст.
4. Написать Lines.BeginUpdate/Lines.EndUpdate
5. CaretPos - ваще не знаю, зачем ты ее устанавливаешь.

Кроме п. 1 принципиальных ошибок я не заметил, но читал я не очень внимательно.


 
able ©   (2004-03-03 21:26) [2]

1. хмм... а в чём ошибка?? :)
2. спасиб
3. ок.. попробую
4. ну это не слишком важно.. у меня вызывается так:
Richedit.lines.beginupdate;
procedure HTMLSyntax(..);
Richedit.lines.endupdate;
5. Ну енто HTMl - редактор.. думаю User"у будет не приятно после каждого введёного символа опять ставить каретку в нужное положение (так она ставится в конец).


 
TUser ©   (2004-03-03 21:45) [3]

1. Text - это строка, там символы нумеруются, начиная с 1


 
Gero ©   (2004-03-03 21:51) [4]

> able ©   (03.03.04 21:26) [2]

Если пишешь html-редактор, не мучайся - иcпользуй SynEdit!
Из твоей затеи врядли что-то выйдет: написать нормальную подсветку синтаксиса не так-то просто, особенно когда плохо знаешь даже азы. Да и RichEdit очень глючный по своей природе.


 
TUser ©   (2004-03-03 21:54) [5]

Могу еще порекомендовать TJvHLEdit, кажется так он называется.


 
able ©   (2004-03-04 12:42) [6]

>Gero ©
>TUser ©
Спасибо, учту)). И не буду задаваться вопросами, где взять эти компоненты))


 
able ©   (2004-03-05 12:30) [7]

а где из взять-то?? а то все платные :(


 
TUser ©   (2004-03-05 12:35) [8]

http://jcl.sourceforge.net/



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
4-1072870320
intrSV
2003-12-31 14:32
2004.03.28
Кнопка Пуск


6-1073569733
Иксик
2004-01-08 16:48
2004.03.28
IP Helper API


3-1077174058
mvg_first
2004-02-19 10:00
2004.03.28
Кодировка dBase при использовании ADO +Jet 4.0


1-1078402508
ex_lucky
2004-03-04 15:15
2004.03.28
TabbedNotebook как сменить название закладки


9-1062240307
TButton
2003-08-30 14:45
2004.03.28
doCollision