IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Алгоритм подсветки синтаксиса, Теория и практика
TarasBer
сообщение 5.03.2010 16:42
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Начну с практики. Для подсветки нужен ведь ТРичЕдит? Я так понял, что надо пробежать по тексту, выделяя разные его куски и меняя цвет этих кусков через СелАттрибутес. Проблема в том, что этот процесс виден пользователю. Я пробовал отрубить перерисовку компонента на время раскраски через посылку сообщения ВМ_СЕТРЕДРАВ, а потом вызвать метод Инвалидате. Но проблема тут в том, что это Инвалидате сначала чистит окно, а потом выводит текст, то есть создаёт мерцание. Вопрос - как раскрасить текст, чтобы пользователю не был виден процесс раскрашивания, а был виден только результат?
Теория. Какие вообще алгоритмы есть? Прогон всего текста при каждой операции неэкономичен. Прогон только ближайшего к курсору слова при каждом изменении? А что делать после операций с блоками текста? Ни у всякие такие вопросы. В общем, есть ли какая-то общая теория на эту тему?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Прохожий
сообщение 10.11.2012 18:59
Сообщение #2


Гость






Пляски с Селаттрибутес надо устраивать не по всему тексту, а только в той его части, что видна в окне - это совсем небольшой объем. Перед циклом "выделение - смена цвета" поставить ЛайнесБегинАпдейт, после - ЛайнесЭндАпдейт - тогда раскраска будет возникать в окне вся сразу, без мельтешения.
Процедуру раскраски привязать к событию ОнКейАп для навигации по тексту. Но не ОнКейДаун, понятно, почему smile.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 8.07.2025 10:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"