![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как все цифры в RichEdit покрасить в другой цвет?
demon © (2010-10-26 04:10:00)Прошу помощи, задача вроде бы простая, но я в тупике.
Если конкретно, то не знаю как определить число в RichEdit1.SelText или другой символ.
demon (2010-11-01 17:37:00) [1]Подошел к своей задаче с другой стороны, наверняка неграмотно... Но работает.
Текст в RichEdit добавляю через:
procedure AddText(Text: String);
begin
Form1.RichEdit1.SelText := Text;
end;
А цифры (то, что хочу выделить другим цветом):
procedure AddColorNum(Text: String);
begin
Form1.RichEdit1.SelAttributes.Color := clBlue;
Form1.RichEdit1.SelText := Text;
Form1.RichEdit1.SelAttributes.Color := clBlack;
end;
RWolf (2010-10-27 01:18:00) [2]
> demon © (26.10.10 17:12) [8]
> Смысл способа ясен, но такой вариант очень громоздкий.
пять строчек кода — это громоздко?
TStas (2010-10-26 21:32:00) [3]PS. SelText - это обычное строковое св-во. Копируешь его в переменную строковую, чтобы почём зря метод чтения не вызывать, и в строчке ищешь, что нужно.
Админы, не ругайтесь, что два сообщения подряд написал
TStas (2010-10-26 21:30:00) [4]А нужно именно в SelText? Или вообще во всём тексте? Самый, ИМХО, короткий путь примерно такой.
1) BegN := RichEdit1.SelStart; //Получил номер начала выделения, начиная с 0
Ln := RichEdit1.SelLength; //Длинна выделения
If Ln = 0 then exit; //С пустым текстом ничего не делаем
S := RichEdit1.SelText; //Собственно, выделенная строчка
2) RichEdit1.Lines.BeginUpdate; //Заблокировал рисование, чтобы не мелькало при перекраске
3) for i := 1 to Ln do //Цикл по всей выделенной строке
If S[i] in ['0'..'9'] then //Это цифра?
begin // - Да, цифра
n := BegN + i - 1; //Номер символа от начала текста. -1 поскольку с 0
RichEdit1.SelStart := n; //Начал выделять с цифры
RichEdit1.SelLength := 1; //Выделил 1 символ
RichEdit.SelAttributes.Color := clRed; //красеньким. Это TColor
RichEdit1.SelAttributes.Style := [fsBold]; //Жирным. Это стиль шрифта
end;
4) RichEdit1.Lines.EndUpdate; //Разрешил рисоваться
Это самый простой способ. Название свойств писал по памяти, мог и с ошибками написать. Его можно, но особо не нужно, оптимизировать, например, посчитав сколько подряд цифр и выделяя их сразу. Но в реальности это значение не имеет, т. к. время тратится на перерисовку, а здесь просто выставляются атрибуты.
Если нужно заменить выделение не в выделенном, а во всём тексте, тогда нужно SelText заменить в шаге 1 на просто текст, а BegN просто выкинуть, он 0, а вместо Ln := SelLength написать Length(RichEdit1.Text)
Германн (2010-10-26 17:38:00) [5]
> такой вариант очень громоздкий
Тогда замени RichEdit на SinEdit. Ничего ручками делать не надо будет.
:)
demon (2010-10-26 17:12:00) [6]Смысл способа ясен, но такой вариант очень громоздкий.
RWolf (2010-10-26 14:01:00) [7]
> Как все цифры в RichEdit покрасить в другой цвет?
1) выгрузить содержимое RichEdit в формате RTF;
2) с помощью регулярных выражений дополнить все вхождения чисел оператором цвета \cbn (см. http://www.codenet.ru/progr/formt/rtf1.php);
3) загрузить RTF обратно в RichEdit.
Leonid Troyanovsky (2010-10-26 09:10:00) [8]
> KilkennyCat © (26.10.10 08:33) [5]
> гм.. и в новых делфях? что-то мне помнится, с селектом очень
> нагло работал...
Наверное, с SelText[1] или подобным.
--
Regards, LVT.
KilkennyCat (2010-10-26 08:33:00) [9]
> Leonid Troyanovsky © (26.10.10 07:44) [3]
гм.. и в новых делфях? что-то мне помнится, с селектом очень нагло работал...
Leonid Troyanovsky (2010-10-26 07:54:00) [10]
> demon © (26.10.10 04:10)
> Если конкретно, то не знаю как определить число в RichEdit1.
> SelText или другой символ.
Если конкретно, то
1. В SelText м.б. и не один символ.
2. Число м.б. представлено не только десятичными цифрами,
f.e., 0xFF, +0.1e-3, e^(i*pi).
--
Regards, LVT.
Leonid Troyanovsky (2010-10-26 07:44:00) [11]
> KilkennyCat © (26.10.10 06:12) [1]
> case RichEdit1.SelText of
Ordinal type required.
--
Regards, LVT.
MonoLife (2010-10-26 06:59:00) [12]procedure Val() +F1
KilkennyCat (2010-10-26 06:12:00) [13]case RichEdit1.SelText of
'1' : showmessage('один');
'2' : showmessage('два');
else showmessage('много');
end;
strtointdef()