Начну с практики. Для подсветки нужен ведь ТРичЕдит? Я так понял, что надо пробежать по тексту, выделяя разные его куски и меняя цвет этих кусков через СелАттрибутес. Проблема в том, что этот процесс виден пользователю. Я пробовал отрубить перерисовку компонента на время раскраски через посылку сообщения ВМ_СЕТРЕДРАВ, а потом вызвать метод Инвалидате. Но проблема тут в том, что это Инвалидате сначала чистит окно, а потом выводит текст, то есть создаёт мерцание. Вопрос - как раскрасить текст, чтобы пользователю не был виден процесс раскрашивания, а был виден только результат?
Теория. Какие вообще алгоритмы есть? Прогон всего текста при каждой операции неэкономичен. Прогон только ближайшего к курсору слова при каждом изменении? А что делать после операций с блоками текста? Ни у всякие такие вопросы. В общем, есть ли какая-то общая теория на эту тему?
DRKB -> VCL -> TMemo -> Delphi-компонент для подкраски синтаксиса
То есть по сути делают свои аналоги ТМемо с переделанной функцией отрисовки?
Да. По крайней мере все сколько-нибудь прилично работающие подсветки построены именно по такому принципу.
Пляски с Селаттрибутес надо устраивать не по всему тексту, а только в той его части, что видна в окне - это совсем небольшой объем. Перед циклом "выделение - смена цвета" поставить ЛайнесБегинАпдейт, после - ЛайнесЭндАпдейт - тогда раскраска будет возникать в окне вся сразу, без мельтешения.
Процедуру раскраски привязать к событию ОнКейАп для навигации по тексту. Но не ОнКейДаун, понятно, почему
Это теоретические измышления. Практическая реализация тут же покажет несостоятельность этих измышлений. Всё это хорошо "на бумаге", и если бы было так просто - то и вопросов бы не было.
на практике это работает
(загружен сборничек произведений 20 мб, подсвечены имена собственные и омографы в тексте)
Эскизы прикрепленных изображений
А я вообще свой велоEdit сделал. А фигли, если стандартный не даёт нормально перехватить отрисовку.
Ну и со всякими фишками заодно, типа длинный буфер правок (а не на 1 операцию), таб по выделенному тексту как сдвиг вправо...
Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. https://nvsp.co.in/myths-about-slot-machines-lets-debunk-them/