Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > RichEdit атрибуты текста


Автор: WapCel 7.4.2010, 02:32
Создал чат
Сообщения сохраняются в TRichEdit

у меня есть имя юзера и сообщение

Так как ищо не знаю как только имя юзера покрасить, я просто крашу всю строку
Строка локального юзера: clBlack, других: clGray
Код

if (tmUser == EditNickname->Text) // tmUser - юзер // EditNickname->Text - имя юзер клиента
{
RichChat->SelAttributes->Color = clBlack;
RichChat->SelAttributes->Style = MemoChat->SelAttributes->Style << fsBold;
}
else
{
RichChat->SelAttributes->Color = clGray;
RichChat->SelAttributes->Style = MemoChat->SelAttributes->Style << fsBold;
}
RichChat->Lines->Add(tmTmp); / tmTmp - юзер: сообщение
}


Помогите украсить имя юзера чтобы получилось так:

Andrey: Hi all!
Nicky: Hi Andrey! What do you do?
Andrey: I play CS smile
Nicky: Are you ok?
Andrey:I'm fine thank you and you?

Автор: xvr 7.4.2010, 10:50
Вместо RichChat->Lines->Add(tmTmp); используй вставку текста через RichChat->SelText=... (перед этим надо сделать RichChat->SelStart=RichChat->Text.Length(); RichChat->SelLength=0;) остальное, как у тебя
NB. Вместо вычисления RichChat->Text.Length() каждый раз лучше хранить длинну текста в переменной и обновлять ее при добавлении текста, иначе для больших текстов в RichEdit'е будут тормоза.

Автор: WapCel 7.4.2010, 13:09
Очень много кода  smile 
А так все ок  smile  smile  smile  smile 
xvr, вы так имели ввиду сделать?

Код

if (tmUser == EditNickname->Text)
{
RichChat->SelStart=RichChat->Text.Length();
RichChat->SelLength = 0;
RichChat->SelAttributes->Color = clGray;
RichChat->SelAttributes->Style = RichChat->SelAttributes->Style << fsBold;
RichChat->SelText = tmUser+": ";
RichChat->SelAttributes->Color = clBlack;
RichChat->SelAttributes->Style = RichChat->SelAttributes->Style.Clear();
RichChat->SelText = tmValue;
}
else
{
RichChat->SelStart=RichChat->Text.Length();
RichChat->SelLength = 0;
RichChat->SelAttributes->Color = clBlue;
RichChat->SelAttributes->Style = RichoChat->SelAttributes->Style << fsBold;
RichChat->SelText = tmUser+": ";
RichChat->SelAttributes->Color = clBlack;
RichChat->SelAttributes->Style = RichChat->SelAttributes->Style.Clear();
RichChat->SelText = tmValue;
}
MemoChat->Lines->Add("");

MemoChat->Perform(EM_SCROLLCARET, 0, 0);
}

Автор: WapCel 7.4.2010, 13:54
Screenshot

Автор: xvr 7.4.2010, 16:32
Цитата(WapCel @  7.4.2010,  13:09 Найти цитируемый пост)
xvr, вы так имели ввиду сделать?
Да, как то так
Цитата

Очень много кода
Обвернуть в процедуры

Автор: WapCel 7.4.2010, 16:39
Цитата

Обвернуть в процедуры

Как?..  smile 

Автор: xvr 7.4.2010, 18:21
Цитата(WapCel @  7.4.2010,  16:39 Найти цитируемый пост)
Как?..

Код

void <YouForm>::draw(AnsiString text, TColor color, bool is_bold=true)
{
 RichChat->SelStart=RichChat->Text.Length();
 RichChat->SelLength = 0;
 RichChat->SelAttributes->Color = color;
 if (is_bold) RichChat->SelAttributes->Style = RichChat->SelAttributes->Style << fsBold;
 RichChat->SelText = text;
 RichChat->SelAttributes->Color = clBlack;
 RichChat->SelAttributes->Style = RichChat->SelAttributes->Style.Clear();
 RichChat->SelStart=RichChat->Text.Length();
 RichChat->SelLength = 0;
}

...

draw(tmUser+": ",tmUser == EditNickname->Text?clGray:clBlue);
RichChat->SelText = tmValue+"\r\n";
MemoChat->Perform(EM_SCROLLCARET, 0, 0);

...


Автор: WapCel 7.4.2010, 21:28
xvr, Все понял спасибо за сделаю под свою прог smile у  smile   smile  smile  smile 

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