[Delphi6]подсветка HTML
Здравствуйте!
Как можно подсветить HTML теги в richedit'е?
Может у кого-нибудь есть пример?
← Май 2004 → | ||||||
7
|
||||||
За последние 60 дней ни разу не выходила
Сайт листа:
http://codeguru.ru
Открыт:
21-09-2003
Пре-модерация: Нет
Адрес для писем в лист: comp.soft.prog.prog-list@subscribe.ru
Адрес
модератора: comp.soft.prog.prog-owner@subscribe.ru
Здравствуйте!
Как можно подсветить HTML теги в richedit'е?
Может у кого-нибудь есть пример?
Hello Томилов,
Thursday, May 6, 2004, 10:15:46 PM, you wrote:
Пристально исходник не изучал, но сдается мне, что он неправильно
подсветит, к примеру
<code>< text</code>
или
<a href='javascript: alert(">;->");'>click</a>
Здоровеньки булы, Grief!
7 мая 2004 г., пятница, 09:20:41 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "[Delphi6]подсветка HTML",
в котором сообщалось следующее:
Ну блин я же общий принцип привел а не готовую к продаже прогу. Да и
html я не увлекаюсь поэтому и не подумал о существовании таких
случаев.
Здоровеньки булы, keel!
6 мая 2004 г., четверг, 00:19:44 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "[Delphi6]подсветка HTML",
в котором сообщалось следующее:
А что там особенного?
Ищешь '<' - pos('<', s)
Ищешь '>' - pos('>', s)
Richedit.SelStart
Richedit.SelLength
Richedit.SelAttributes.Color
Затем ищешь следующее вхождение '<'
PS: Я не стал делать обработку тегов такого типа
<iframe
bla-bla-bla
т.е. которые начинаются на одной строке, а заканчиваются на другой.
Надо же что-то тебе и самому написать ;)
PPS: Я не понял что это за косяк, но прикол еще тот:
Если обрабатывается текст который не виден на экране (скролить
надо) - то он не меняет цвет.
PPPS: Данный код написан за ~ 20 минут, ногами не пинать.
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
StartS: integer;
EndS: integer;
MovePlus: integer;
Len: integer;
s: string;
begin
try
Richedit1.SelAttributes.Color := clBlue;
RichEdit1.Lines.BeginUpdate;
MovePlus := 0;
for i := 0 to RichEdit1.Lines.Count - 1 do
begin
s := RichEdit1.Lines[i];
Len := Length(s);
while pos('<', s) <> 0 do
begin
StartS := pos('<', s);
Richedit1.SelStart := i + MovePlus + StartS - 1;
EndS := pos('>', s);
if EndS <> 0 then
begin
Richedit1.SelAttributes.Color := clBlue;
Richedit1.SelLength := EndS - StartS + 1;
Richedit1.SelAttributes.Color := clBlue;
end;
s := copy(s, 1, StartS - 1) + '#' + copy(s, StartS + 1, Len);
s := copy(s, 1, EndS - 1) + '#' + copy(s, EndS + 1, Len)
end;
MovePlus := MovePlus + Len + 1;
end;
finally
RichEdit1.Lines.EndUpdate;
RichEdit1.Font.Color := clBlack;
end;
end;