Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Net Chat


Автор: c1ber 21.4.2010, 12:52
хочу сделать чтобы при запуске приложения появлялось окно для ввода ника,который будет уже в чате и чтобы история в файл сохранялась. кто сможет в этом помочь?

Автор: kami 21.4.2010, 22:12
Цитата(c1ber @  21.4.2010,  12:52 Найти цитируемый пост)
чтобы при запуске приложения появлялось окно для ввода ника

В DRKB есть примеры создания Splash-заставки. Вместо картинки подставить два Tedit для логина и пароля, сделать не Show а ShowModal, передать полученное куда нужно.
Цитата(c1ber @  21.4.2010,  12:52 Найти цитируемый пост)
чтобы история в файл сохранялась.

А что не получается? Создать файл, записать переписку, или прочитать записанное?

Без обид, но постановка вопроса звучит как 
Цитата

  - Здесь что-то не работает. 
  - Что не работает?
  - Вот вы и разберитесь, что не работает!

Автор: c1ber 21.4.2010, 23:24
а как сделать чтобы файл создавался автоматически?и запись шла туда
DRKB я скачать не могу,путая страница выходит((

Автор: kami 22.4.2010, 21:16
Цитата(c1ber @  21.4.2010,  23:24 Найти цитируемый пост)
как сделать чтобы файл создавался автоматически?

Чтобы файл создавался автоматически, его нужно создать, скорее всего - при инициализации чата.
Например, в OnCreate основной формы.
Цитата(c1ber @  21.4.2010,  23:24 Найти цитируемый пост)
и запись шла туда

Я думаю так:
1. Найти в коде, где производится вывод сообщений на экран, в один из компонентов формы чата (код не качал - не хочу лазить по дебрям, тем более - не Вашим).
2. Включить туда кроме вывода на экран вывод в свой "автоматически созданный файл".
Вот только прежде чем писать вывод в файл, нужно определиться с форматом вывода. Ведь потом эту историю придется как-то отображать. Посему нужно предусмотреть к записи всё, что может понадобиться при отображении - к примеру имя пользователя, время сообщения, кому адресовано и т.п...

Добавлено через 1 минуту и 38 секунд
Цитата(c1ber @  21.4.2010,  23:24 Найти цитируемый пост)
DRKB я скачать не могу,путая страница выходит((

Ну так... это описано много где http://yandex.ru/yandsearch?clid=14585&text=%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C+Splash-%D1%84%D0%BE%D1%80%D0%BC%D1%83+%D0%BD%D0%B0+Delphi&lr=2

Автор: c1ber 2.6.2010, 21:52
1) как вывести в отдельном окне все ip компов у которых включена программа и можно было выбирать их

2) как отправлять запрос который не будет виден в пользователям?

Автор: kami 2.6.2010, 23:30
Цитата(c1ber @  2.6.2010,  21:52 Найти цитируемый пост)
как вывести в отдельном окне все ip компов у которых включена программа и можно было выбирать их

Задача раскладывается на тривиальные:
1. Узнать, где в коде программы хранятся/откуда можно получить все IP.
2. Определиться, куда (в какой компонент) выводить их
3. Создать новую форму и выбранный компонент на ней
4. Заполнить компонент всеми имеющимися IP.
5. При подключении/отключении программы на одном из компьютеров в сети - обновлять список IP
С каким этапом проблемы?
В дополнение - при выборе метода отображения и хранения адресов стоит задуматься о том, что скорее всего по "выделенному" адресу из полного списка нужно будет отправлять приватное сообщение. Так вот - "вычленение" выделенного адреса и нахождение соответствующего ему корреспондента должно проходить максимально просто, но - не в ущерб удобству пользования программой. 

Цитата(c1ber @  2.6.2010,  21:52 Найти цитируемый пост)
как отправлять запрос который не будет виден в пользователям?

Как вариант - отправлять как обычно (или добавить к запросу какой-нибудь префикс "скрытия". На приеме перед выводом запроса пользователю проверять наличие этого префикса/другого признака скрытого сообщения, и принимать решение - показывать его пользователю или нет.

Автор: c1ber 3.6.2010, 20:42
вот как раз я и хотел узнать какой префикс использовать

Автор: kami 3.6.2010, 21:19
Цитата(c1ber @  3.6.2010,  20:42 Найти цитируемый пост)
хотел узнать какой префикс использовать

Класс. Вот только это вопрос к тебе. Только ты сможешь ответить, какой префикс/суффикс тебе будет проще обработать + гарантировать, что он 100% не попадется в сообщении пользователя, во избежание ложных срабатываний. Ко всему прочему он не должен занимать много места, для не-сильного утяжеления трафика.
Скорее всего, он должен состоять из уникальной (невозможной к появлению в сообщении пользователя) комбинации символов + флага, обозначающего у какого пользователя оно (сообщение) все-таки должно отобразиться.

Автор: c1ber 4.6.2010, 11:04
kami, ты не понял меня! я хочу узнать как этот префикс отправлять,чтобы он не отображался,алгоритм то я давно продумал,мне бы код примерный отправки этого запроса

Автор: Exai1e 4.6.2010, 11:35
c1ber, это ты не понимаешь что тебе нужно.
Например если ты отправляешь сообщения формата:

|какой суффикс|ID клиента|текст сообщения|

где:
какой то суффикс может быть например:
A - отправить всем
P - приватное сообщение

ID клиента:
может быть к примеру ник, а если поле пустой - то сообщение отправляется всем в чат

текст сообщения, думаю с этим понятно
следовательно, у сообщения у тебя могут получиться:
|A|пустой|Всем привет|
или
|P|VasyaPupkin|Привет Васек|
на сервере парсиш сообщение, если сервер хранит список ники-айпи, то после получения суффика P и ника, сервер может отослать данные определенному клиенту, если суффикс A то сервер отсылаеш сообщение всем.
Как то так, думаю идея ясна

Автор: c1ber 4.6.2010, 11:45
Exai1e, спасибо за новую идею,я чуток по другому представлял себе это,слишком по мудрому)))

Автор: c1ber 4.6.2010, 12:21
вот еще вопрос: как после очистки поля ввода вернуть каретку в начало?
Редактировать/Удалить сообщение
Код

procedure TForm1.RichEdit2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
 str,a: string;
begin
 StaticText1.Caption:=IntToStr(RichEdit2.GetTextLen+1);
 if (GetKeyState(VK_CONTROL) >= 0) and (Key = 13) then  // Если пользователь нажал Enter
 begin
 str:=#13#149' '+Nick+' '+'('+TimeToStr(DateTimePicker1.Date)+' '+DateToStr(DateTimePicker1.Date)+')'; // составляем сообщение
 a:=RichEdit2.text;
 AddText(RichEdit1, str+#13, True, clblue);   //выводим логин и дату
 AddText(RichEdit1, a, false, clblack);   //выводим сам текст
 RichEdit2.Clear;                    //Чистим поле ввода
 PlaySound('SND1', 0, SND_RESOURCE or SND_ASYNC);  //звук отправки
 NET_Clear;                      // чистим сетевой буфер
 //NET_Write(@str[1], Length(Str));  // пишем данные
 NET_Send(nil, 21666, false);      // посылаем их широковещательным пакетом
 StaticText1.Caption:='0';
 end;
end;

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