Главная страница
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.022 c
1-1078995525
Serge
2004-03-11 11:58
2004.03.28
Компиляция проектов из разных папок !!!


3-1077192527
denmin
2004-02-19 15:08
2004.03.28
Помогите завязать таблицы Paradox и SQL Server 2000


7-1073672940
DelphiN!
2004-01-09 21:29
2004.03.28
Создать свой процес в потоке чужого процесса


1-1078948644
SeriousSam
2004-03-10 22:57
2004.03.28
Как программно нажать какую либо кнопку (на клавиотуре)?


1-1078874098
NetKnight
2004-03-10 02:14
2004.03.28
Report in PDF?