Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.23;
Скачать: CL | DM;

Вниз

Как все цифры в RichEdit покрасить в другой цвет?   Найти похожие ветки 

 
demon ©   (2010-10-26 04:10) [0]

Прошу помощи, задача вроде бы простая, но я в тупике.
Если конкретно, то не знаю как определить число в RichEdit1.SelText или другой символ.


 
KilkennyCat ©   (2010-10-26 06:12) [1]

case RichEdit1.SelText of
"1" : showmessage("один");
"2" : showmessage("два");
else showmessage("много");
end;

strtointdef()


 
MonoLife ©   (2010-10-26 06:59) [2]

procedure Val() +F1


 
Leonid Troyanovsky ©   (2010-10-26 07:44) [3]


> KilkennyCat ©   (26.10.10 06:12) [1]

> case RichEdit1.SelText of

Ordinal type required.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-10-26 07:54) [4]


> demon ©   (26.10.10 04:10)  

> Если конкретно, то не знаю как определить число в RichEdit1.
> SelText или другой символ.

Если конкретно, то
1. В SelText м.б. и не один символ.
2. Число м.б. представлено не только десятичными цифрами,
f.e., 0xFF, +0.1e-3, e^(i*pi).

--
Regards, LVT.


 
KilkennyCat ©   (2010-10-26 08:33) [5]


> Leonid Troyanovsky ©   (26.10.10 07:44) [3]


гм.. и в новых делфях? что-то мне помнится, с селектом очень нагло работал...


 
Leonid Troyanovsky ©   (2010-10-26 09:10) [6]


> KilkennyCat ©   (26.10.10 08:33) [5]

> гм.. и в новых делфях? что-то мне помнится, с селектом очень
> нагло работал...

Наверное, с SelText[1] или подобным.

--
Regards, LVT.


 
RWolf ©   (2010-10-26 14:01) [7]


> Как все цифры в RichEdit покрасить в другой цвет?

1) выгрузить содержимое RichEdit в формате RTF;
2) с помощью регулярных выражений дополнить все вхождения чисел оператором цвета \cbn (см. http://www.codenet.ru/progr/formt/rtf1.php);
3) загрузить RTF обратно в RichEdit.


 
demon ©   (2010-10-26 17:12) [8]

Смысл способа ясен, но такой вариант очень громоздкий.


 
Германн ©   (2010-10-26 17:38) [9]


> такой вариант очень громоздкий

Тогда замени RichEdit на SinEdit. Ничего ручками делать не надо будет.
:)


 
TStas   (2010-10-26 21:30) [10]

А нужно именно в 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)


 
TStas   (2010-10-26 21:32) [11]

PS. SelText - это обычное строковое св-во. Копируешь его в переменную строковую, чтобы почём зря метод чтения не вызывать, и в строчке ищешь, что нужно.
Админы, не ругайтесь, что два сообщения подряд написал


 
RWolf ©   (2010-10-27 01:18) [12]


> demon ©   (26.10.10 17:12) [8]
> Смысл способа ясен, но такой вариант очень громоздкий.

пять строчек кода — это громоздко?


 
demon ©   (2010-11-01 17:37) [13]

Подошел к своей задаче с другой стороны, наверняка неграмотно... Но работает.

Текст в 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;



Страницы: 1 вся ветка

Текущий архив: 2011.01.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1288134132
Германн
2010-10-27 03:02
2011.01.23
Работа с "хранилищем объектов" (Repository)


2-1288724567
SIV5000
2010-11-02 22:02
2011.01.23
Контекстное меню


2-1288452814
strannik2
2010-10-30 19:33
2011.01.23
Чем TArrayString отличается от TArray<string> ?


11-1228208201
Dy1
2008-12-02 11:56
2011.01.23
юникодовый ListView


15-1286210774
fen1ks
2010-10-04 20:46
2011.01.23
построение параболы по 3 точкам