Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 02:19   #1
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию Цветной текст RichEdit

Как сделать в RichEdit такое, допустим текст
^1При^2вет, ^1 - означает красный ^2 - желтый. И текст должен выйти При- красный, вет - желтый. Как такое осуществить?
KoBRaAndrey вне форума Ответить с цитированием
Старый 13.12.2009, 02:31   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Элементарно.
Код:
SelAttributes
SelLength
SelStart
Если что-то непонятно - милости прошу скачать с нашего же сайта (ссылка внизу - "Клуб программистов" - не знали ?):
http://programmersclub.ru/files/book1_100comp.rar
mihali4 вне форума Ответить с цитированием
Старый 13.12.2009, 02:33   #3
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Я только что читал, нету нужного мне, юзер будет писать, и выделение не нужно! Нужно именно цвет текста менять. А когда таким способом, то не знаю почему текст выделяется, и получается ты пишеш и заменяешь тот текст...
Вот сделал:
Код:
var
f, t, l, I: cardinal;
begin

for I:=0 to RichEdit1.Lines.Count-1 do begin
if pos('^1', RichEdit1.Lines.Strings[i])<>0 then
if pos('^2', RichEdit1.Lines.Strings[i])<>0 then   begin

   f := pos('^1', RichEdit1.Lines.Strings[i])-1;
   t := pos('^2', RichEdit1.Lines.Strings[i]);
   l := t - f;
   RichEdit1.SelStart := f;
   RichEdit1.SelLength := l;
   RichEdit1.SelAttributes.Color := clblue;
end;
  end;
end;
Пишу aaa^1aaaaaaa^2 и пишу любую букву после ^2 происходит выделение текста ^1sssssssssssssssssssssssss^.. Что делать?

Последний раз редактировалось KoBRaAndrey; 13.12.2009 в 02:40.
KoBRaAndrey вне форума Ответить с цитированием
Старый 13.12.2009, 02:39   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
Я только что читал, нету нужного мне, юзер будет писать, и выделение не нужно! Нужно именно текст
Вам же mihali4 все сказал.
Находите текст (Pos), выделяйте его(SelStart; SelLength) и присваивайте аттрибуты (SetAttributes).
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 13.12.2009, 02:41   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Для того самого юзера.
Чтобы закрасить текст, его сначала нужно выделить при помощи
Код:
SelStart
SelLength
А потом при помощи
Код:
SelAttributes
установить нужные аттрибуты, к коим относятся и цвет фона, и цвет шрифта, и тип шрифта... и многое другое.
mihali4 вне форума Ответить с цитированием
Старый 13.12.2009, 02:42   #6
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

В чем проблема кода который выше? А как потом убрать выделение?

Последний раз редактировалось KoBRaAndrey; 13.12.2009 в 02:44.
KoBRaAndrey вне форума Ответить с цитированием
Старый 13.12.2009, 02:46   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Объясняю.
Окромя POS, есть еще и POSEX.
Первая ищет с самого начала, а вторая - с заданной позиции.
Судя по всему, у вас в первый раз (поскольку POS) находит раньше, чем '^1'...
И выделение у вас происходит "задом наперед".
Дабы не мучаться зазря, пройдите этот кусок по шагам и посмотрите, какие значения получаются у F и L...

Последний раз редактировалось mihali4; 18.03.2010 в 01:22.
mihali4 вне форума Ответить с цитированием
Старый 13.12.2009, 02:47   #8
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Попробовал другим способом:
Код:
var
f, t, l, I: cardinal;
begin
for I:=0 to RichEdit1.Lines.Count-1 do begin
if pos('^1', RichEdit1.Lines.Strings[i])<>0 then
if pos('^2', RichEdit1.Lines.Strings[i])<>0 then   begin
f := pos('^1', RichEdit1.Lines.Strings[i])+1;
t := pos('^2', RichEdit1.Lines.Strings[i])-3;
RichEdit1.SelStart := f;
RichEdit1.SelLength := t;
RichEdit1.SelAttributes.Color := clred;
end;
end;
Та же проблема Помогите

Последний раз редактировалось KoBRaAndrey; 13.12.2009 в 02:56.
KoBRaAndrey вне форума Ответить с цитированием
Старый 13.12.2009, 03:10   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Однако вы лентяй, любезный...
На 74-75 странице рекомендованной вам книги весь этот процесс доложен весьма доступно. Причем с примерами.
Или вам удобнее, если я буду пересказывать абзацы книги?
Нет уж, давайте конкретные вопросы...
mihali4 вне форума Ответить с цитированием
Старый 13.12.2009, 10:50   #10
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Все незнаю... Сегодня встал, сразу за комп, и уже целый час вожусь...
Код:
var
ipos : Integer;
begin
    ipos := Pos('test',Richedit1.text);
    Richedit1.SelStart := ipos -1;
    Richedit1.SelLength := length('test');
    Richedit1.SelAttributes.color := Richedit1.SelAttributes.color + clred;
    Richedit1.SelStart := length(richedit1.Text);
end;
Выделяется правильно, но я побывал выделять от ^1 до ^2 и не вышло
Помогите кто-нибудь! Просто я не знаю... Мне нужно цвета от ^1...^9.
KoBRaAndrey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цветной текст в RichEdit - проблемы. Fezilk Общие вопросы Delphi 2 27.08.2009 12:06
RichView(Edit) - цветной текст - реально? Fezilk Общие вопросы Delphi 6 24.08.2009 09:27
Как вставить в TListBox цветной текст? VintProg Общие вопросы Delphi 2 03.08.2009 11:46
Цветной текст ERASERROR Общие вопросы Delphi 4 25.01.2008 21:04
текст в richedit по ширине *Devil* Компоненты Delphi 1 15.06.2007 16:27