Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как все цифры в 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()


Наверх

Титульная страница Поиск, карта сайта Написать письмо