Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SynUniHighlighter и SynEdit > Хочется подсвечивать текст в нужных позициях


Автор: kDanil 5.12.2005, 21:57
Хочется подсвечивать текст в нужных позициях во всех строках. То есть 6 позиция для всех строк должна иметь цвет фона зеленый, например. Это нужно для редактора фортрана, там 6 позиция особенная. В редакторе Microsoft Visual Fortran мне понравилась эта идея, теперь хочется это реализовать.
Уже второй день сижу изучаю код, пока получилось нарисовать FillRect для 6 позиии всех строк, но теряются все символы в 6 позиции, их закрашивает мой Rect. И приходится это реализовывать внутри SynEdit.pas , что не правильно, так как будет работать и для других форматов файлов.
smile Пытался что-то придумать в файле SynHighLighterFortran.pas, но ничего толком не придумал. smile
Подскажите, если у кого есть мысли, как это сделать ....

Автор: Vitalik 6.12.2005, 17:51
Привет, kDanil.
Один из вариантов решения этой проблемы можно прочитать здесь: "http://forum.vingrad.ru/index.php?showtopic=37933" smile

Автор: kDanil 6.12.2005, 20:19
Спасибо, будем изучать, может и получится чего smile

Автор: kDanil 9.12.2005, 19:16
Да все получилось, спасибо.

При использовании кода обнаружились следующие ошибки:
[*]Gutter.Width, почему-то не правильно у меня вычислялась(ровно в два символа меньше, чем надо), пришлось ее явно установить используя функцию Gutter.RealGutterWidth(7)

[*]Вторая ошибка в конструкции
Код

// Если сейчас строка не видна на экране
      if not (Line in [TopLine .. TopLine + ClientHeight div LineHeight]) then
        Continue; // переходим к следующей строке

У меня отрабатывает только до 255 строки, потом в этом условии сваливает всегдя на continue. Не стал разбираться в чем тут дело, переписал по своему.

Вообщем спасибо! smile

Автор: Vitalik 10.12.2005, 12:03
Цитата(kDanil @ 9.12.2005, 19:16)
Не стал разбираться в чем тут дело, переписал по своему.

Если не сложно, выложи здесь свой исправленный код smile

Автор: kDanil 10.12.2005, 14:55
Вообщем-то я просто переписал конструкцию in [], получилось так:
Код

if (Line < TopLine) and (Line > TopLine + ClientHeight div LineHeight) then
        Continue; // переходим к следующей строке


Я не большой знаток Delphi поэтому не смогу сказать, чем одна конструкция языка отличается от другой, но то, что так работает - это факт.

Автор: Vitalik 10.12.2005, 17:35
Цитата(kDanil @ 10.12.2005, 14:55)
Вообщем-то я просто переписал конструкцию in [], получилось так:

Вообще-то я имел ввиду полный код (включая и Gutter и может другие изменения)
Мало ли, вдруг, кому-нибудь пригодится smile
Но ладно, думаю, и так разберутся...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)