|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.01.2013, 18:23 | #1 |
Регистрация: 29.01.2013
Сообщений: 7
|
Как в чате организовать изменение цвета и крнтура шрифта?
Уважаемые программисты, у меня тупик. Нужно было создать многопользовательский чат, с возможностью изменения границы и цвета шрифта у всех пользователей с одной машины. Сам чат я написал, всё работает. Не могу справиться с изменением шрифта. Подскажите, пожалуйста, может какие компаненты, их свойства, функции...просто идеи. любая помощь.
Последний раз редактировалось Harapuchyk; 30.01.2013 в 02:31. Причина: Уточнение |
30.01.2013, 11:13 | #2 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Где отображается чат? Можно использовать TRichEdit, например
|
30.01.2013, 13:07 | #3 |
Регистрация: 29.01.2013
Сообщений: 7
|
Текст сообщения набирается в Edit, а сам чат отобрадается в Memo. Получается надо изменить цвет и шрифт всех сразу пользователей, которые седят в чате с одной машины. Значит надо Memo менять.
|
30.01.2013, 13:22 | #4 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
|
30.01.2013, 17:38 | #5 |
Регистрация: 29.01.2013
Сообщений: 7
|
Спасибо. Буду пробовать. А вот как эти настройки(шрифта) применить ко всем пользователям, которые в данный момент в чате, а не одному себе?
|
30.01.2013, 18:30 | #6 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Конечно, взмахнуть волшебной палочкой не получится. Я не знаю, как у тебя функционирует чат, поэтому конкретики не получится. К примеру, сообщения пользователей, отправляемые серверу в текстовом виде, сервером обрабатываются, обвешиваются какими-то служебными флагами и отправляются всем участникам. Т.е., клиенту идёт уже не просто текстовое сообщение, а некая структура, содержащая помимо самого текста какие-то данные о группе, комнате, приватности, игнор иил нет, IP-адресе, версии - всё, что угодно. Клиент, приняв такое мессидж, обрабатывает служебные поля и принимает решение, каким образом отобразить данное сообщение, например, выделить цветом, если одна группа, курсив, если приват, не отображать вообще, если игнор и т.д.
|
30.01.2013, 23:49 | #7 |
Регистрация: 29.01.2013
Сообщений: 7
|
Благодарю ещё раз. Буду работать над этим.Вот код программы. Может поможет.
#include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) // Ñîáûòèå ïðè íàæàòèè êíîïêè "Îòïðàâèòü" { if(Edit1->Text == "") { ShowMessage("Âû íå ââåëè òåêñò ñîîáùåíèÿ!"); // Åñëè ïîëå ââîäà ïóñòîå return; } Memo1->Lines->Add(Edit2->Text+"::"+Edit1->Text); // Äëÿ ñåáÿ int i=0; if (ServerSocket1->Active == true) { for (i=0; i<=(ServerSocket1->Socket->ActiveConnections-1); i++) { ServerSocket1->Socket->Connections[i]->SendText(Edit2->Text+"::"+Edit1->Text); } } else { ClientSocket1->Socket->SendText(Edit2->Text+"::"+Edit1->Text);}// Îòïðàâëåíèå ñîîáùåíèÿ ñåðâåðó Edit1->Text = "" ;// Î÷èñòêà Ýäèòà äëÿ ââîäà íîâîãî òåêñòà } //-------------- void __fastcall TForm1::ClientSocket1Connect(TObjec t *Sender, TCustomWinSocket *Socket) { Memo1->Lines->Add("Âû ïîäêëþ÷èëèñü ê ÷àòó"); //Ñîîáùåíèå äëÿ êëèåíòà î ïîêëþ÷åíèè ê ñåðâåòó } //-------- void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) //Ïðèåì ñîîáùåíèÿ êëèåíòîì { Memo1->Lines->Add(Socket->ReceiveText()); } //----- void __fastcall TForm1::ServerSocket1ClientConnect( TObject *Sender, TCustomWinSocket *Socket) //Ñîáûòèå ïðè ïîäêëþ÷åíèè êëèåíòà { Memo1->Lines->Add("Êëèåíò ïðèñîåäèíèëñÿ"); } //--------- void __fastcall TForm1::ServerSocket1ClientDisconne ct(TObject *Sender, TCustomWinSocket *Socket) //Ñîáûòèå ïðè îòêëþ÷åíèè êëèåíòà { Memo1->Lines->Add("Êëèåíò ïîêèíóë ÷àò"); for (int i=0; i<=(ServerSocket1->Socket->ActiveConnections-1); i++) ServerSocket1->Socket->Connections[i]->SendText("Êëèåíò ïîêèíóë ÷àò"); } //--------- void __fastcall TForm1::ServerSocket1ClientRead(TOb ject *Sender, TCustomWinSocket *Socket) //Ïðèåì ñîîáùåíèÿ ñåðâåðîì { AnsiString msg = Socket->ReceiveText(); Memo1->Lines->Add(msg); for (int i=0; i<ServerSocket1->Socket->ActiveConnections-1; i++)//Êëèåíò1-ñåðâåð-äðóãèå êëèíòû { ServerSocket1->Socket->Connections[i]->SendText(msg); } } //---------- void __fastcall TForm1::Button3Click(TObject *Sender) // Ñîáûòèå äëÿ íàæàòèÿ íà êíîïêó "Ñîçäàòü ñåðâåð" { ServerSocket1->Active = true; Memo1->Lines->Add("Ñåðâåð ñîçäàí"); } //------------ void __fastcall TForm1::Button4Click(TObject *Sender) //Ñîáûòèå ïðè íàæàòèè êíîïêè "Ïîäêëþ÷èòüñÿ" { ClientSocket1->Host = Edit3->Text; // Ïðèñâàèâàåì êëèåíòó Àé-Ïè èç íàøåãî Ýäèòà ClientSocket1->Address = Edit3->Text; ClientSocket1->Active = true; Button3->Enabled = false; // Äåëàåì íåäîñòóïíûì "Ñîçäàòü ñåðâåð" Button6->Enabled = true; // Äåëàåì äîñòóïíûì "Îòêëþ÷èòüñÿ" } //---------- void __fastcall TForm1::Button6Click(TObject *Sender) // Ñîáûòèå ïðè íàæàòèè êíîïêè "Îòêëþ÷èòüñÿ" { ClientSocket1->Active = false; Button3->Enabled = true; // Äåëàåì äîñòóïíûì "Ñîçäàòü ñåðâåð" Button6->Enabled = false; // Äåëàåì íåäîñòóïíûì "Îòêëþ÷èòüñÿ" Memo1->Lines->Add("Âû âûøëè èç ÷àòà"); //Ñîîáùåíèå îá îòêëþ÷åíèè } //-------- void __fastcall TForm1::Image5Click(TObject *Sender) // Ñîáûòèå ïðè íàæàòèè ðèñóíêà "Âûéòè" { exit(1); } //----- void __fastcall TForm1::cbeColorSelect(TObject *Sender) { int color_number = cbeColor->ItemIndex + 1; switch (color_number) { case 1:Memo1->Font->Color=clRed; break; case 2: Memo1->Font->Color=clGreen; break; case 3: Memo1->Font->Color=clYellow; break; case 4: Memo1->Font->Color=clBlue; break; case 5: Memo1->Font->Color=clAqua; break; case 6: Memo1->Font->Color=clFuchsia; break; case 7: Memo1->Font->Color=clWhite; break; case 8: Memo1->Font->Color=clDefault; break; case 9: Memo1->Font->Color=clGray; break; default: break; } /* так я реализовал изменение цвета, но он меняет только у себя, а у других нет, в это и загвоздка*/ }::Font- |
31.01.2013, 10:05 | #8 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Ну, надо же сообщить другим клиентам, что надо отобразить сообщение каким-то цветом. Ты рассылаешь только текст сообщения и ник [если я правильно понял]. Таким же незатейливым способом принятое сообщение добавляется в Мемо. Например, можно добавлять к сообщению несколько служебных полей, чтобы имелась возможность как-то его правильно отображать. Например, вместо "Коля::Всем привет!" отправлять что-то вроде "@код_цвета@код_шрифта@ещё_что_то@К оля::Всем привет!". Приняв такую строку, надо вырезать само сообщение, добавить его в TRichEdit, а потом установить TextAttributes согласно служебной информации. Тогда у каждого пользователя будет свой выбранный шрифт и цвет. Осталось только как следует продумать, что ещё надо будет передавать служебного, чтобы реализовать, например, рассылку группе, приват, свойства шрифта [подчёркивание, жирный, курсив] и т.д. Такое решение не претендует на идеал, но всё же...
|
31.01.2013, 12:42 | #9 |
Регистрация: 29.01.2013
Сообщений: 7
|
Понятно. буду пробвать делать. Спасибо!
|
01.02.2013, 15:14 | #10 |
Регистрация: 29.01.2013
Сообщений: 7
|
FataLL, Благодарю за помощ и за потраченное время. Всё получилось. Я отправлял сообщение с кодом цаета. Затам его считывал, и при наличии кода выполнят определенное изменение в цвете и шрифте. Спасибо!!!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать чтоб распознавались 3 образа | vicvic90 | Помощь студентам | 5 | 11.09.2012 22:51 |
Как сделать чтоб ListBox1 обновлялся в VB? | Gyfmod | Общие вопросы .NET | 4 | 16.08.2012 15:33 |
Как сделать чтоб заокруглить число??? | yura_zb | Общие вопросы C/C++ | 3 | 13.04.2011 16:40 |
Как сделать, чтоб в ячейке ВЫБИРАЛОСЬ? | kristinafadeewa | Microsoft Office Excel | 12 | 27.10.2008 06:05 |
Как в ячейке Excel сделать надстрочный шрифт? | Sony | Общие вопросы Delphi | 2 | 26.07.2007 01:59 |