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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2009, 17:42   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию Проблема с личкой в чате

У меня возникли две проблемы с чатом. Когда подключаю код с обработкой %0, %1, %2 перестаёт работать личка. И не получается отрезать %+цифра при отправке сообщения в чат.
Вложения
Тип файла: rar chat.rar (18.7 Кб, 13 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 16.03.2009, 17:47   #2
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

хм... а не Delete(s,1,2); ?
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 16.03.2009, 18:40   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Нет не получается вот что происходит
Код:
  {Если мы хотим послать приватное сообщение, но не выбрали адресата -
   нас покарают замечанием :) и выгонят из обработчика}
  if (CheckBox1.Checked)and(LVUsers.ItemIndex < 0) then begin
   ShowMessage('At first you should select the user in the User List!');
   Exit;
  end;
  {Если это приватное сообщение}
  if CheckBox1.Checked then
   s := '#P'+LVUsers.Items[LVUsers.ItemIndex].Caption+';' {добавляем спец.команду и адресат}
  else {А если не очень приватное?}
   s := '#M'; {Просто спец.команду}
  {Добавляем наше имя (от кого) и само сообщение}
  //
  showmessage(s); //показывает #M
  //
  s := s+nickname+';'+Edit1.Text;
  //
  showmessage(s); //показывает #M%0Client;0
  //
  Delete(s,2,3);
  //
  showmessage(s); //показывает #Client;0
  //
  {Посылаем все это добро по сокету}
  ClientSocket1.Socket.SendText(s);
  {И снова ждем ввода в уже чистом TEdit-е}
  Edit1.Text := '';
  ActiveControl := Edit1;
Shouldercannon вне форума Ответить с цитированием
Старый 16.03.2009, 18:49   #4
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Брррр... вам нужно отрезать #M%0 или %0? Чтото я не вьеду, что отрезать-то
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 16.03.2009, 19:08   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Брррр... вам нужно отрезать #M%0 или %0? Чтото я не вьеду, что отрезать-то
#M - оставить; %0 - отрезать
Shouldercannon вне форума Ответить с цитированием
Старый 16.03.2009, 19:43   #6
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Delete(s,pos('%',s),2);
Вроде так...
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 16.03.2009, 20:12   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Спасибо работает. Теперь надо разобраться с проблемой лички.
Когда я подключаю данный
Код:
  //Добавили Item
  L:=LVUsers.Items.Add;
  //Получаем наименование (возможно) с символами %0
  s1:=Copy(s,1,Pos(';',s)-1);
  //Разбираемся с индексом
  if Copy(s1,1,2)='%0' then L.ImageIndex:=0;
  if Copy(s1,1,2)='%1' then L.ImageIndex:=1;
  if Copy(s1,1,2)='%2' then L.ImageIndex:=2;
  //Удаляем из строки ведущий %n
  Delete(s1,1,Pos('%',s1)+1);
  //И только после этого присваиваем имя
  L.Caption:=s1;
  //Убираем все символы до ;
  Delete(s,1,Pos(';',s));
то личка перестает работать, тоесть он как-то мешает.

Последний раз редактировалось Shouldercannon; 17.03.2009 в 11:08.
Shouldercannon вне форума Ответить с цитированием
Старый 17.03.2009, 17:08   #8
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Код:
if pos('%',s1)=1 then Delete(s1,1,Pos('%',s1)+1);
?
т.к. возможен вариант когда % в строке не будет и в результате один сивол всёже удалится...
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 18.03.2009, 10:36   #9
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Dj_smart Посмотреть сообщение
Код:
if pos('%',s1)=1 then Delete(s1,1,Pos('%',s1)+1);
?
т.к. возможен вариант когда % в строке не будет и в результате один сивол всёже удалится...
Возможно из-за этого.
Код:
if pos('%',s1)=1 then Delete(s1,1,Pos('%',s1)+1);
Не помогло.
Насколько я понял после нескольких тестирований весь косяк приходится на эти части
Код:
  //Если подключить этот код личка не доходит, если отключить, тора ботает
  //Добавили Item
  L:=LVUsers.Items.Add;
  //Получаем наименование (возможно) с символами %0
  s1:=Copy(s,1,Pos(';',s)-1);
  //Разбираемся с индексом
  if Copy(s1,1,2)='%0' then L.ImageIndex:=0;
  if Copy(s1,1,2)='%1' then L.ImageIndex:=1;
  if Copy(s1,1,2)='%2' then L.ImageIndex:=2;
  //Удаляем из строки ведущий %n
///////////////////////////////////////
//Из-за этого места не пашет личка!!!//
///////////////////////////////////////
  Delete(s1,1,Pos('%',s1)+1); //Из-за этого Delete не работает
  //И только после этого присваиваем имя
  L.Caption:=s1;
  //Убираем все символы до ;
  Delete(s,1,Pos(';',s));

//

  {Если это приватное сообщение}
  if CheckBox1.Checked then
   s := '#P'+LVUsers.Items[LVUsers.ItemIndex].Caption+';' {добавляем спец.команду и адресат}
  else {А если не очень приватное?}
   s := '#M'; {Просто спец.команду}
  {Добавляем наше имя (от кого) и само сообщение}
  s := s+nickname+';'+Edit1.Text;
  //Здесь я пытаюсь удалить %+ещё один символ стоящий за %, опять таки не получается.
///////////////////////////////////////
//Из-за этого места не пашет личка!!!//
///////////////////////////////////////
  Delete(s,pos('%',s),2); //Из-за этого Delete не работает
У обоих есть Delete из-за очевидно неправильного удаления и не работает личка.

Последний раз редактировалось Shouldercannon; 18.03.2009 в 13:14.
Shouldercannon вне форума Ответить с цитированием
Старый 19.03.2009, 14:42   #10
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Вот та самая причина, по которой личка не доходит адресату
Код:
if (to_ = nickname)or(from_ = nickname) then
у того, кому посылается сообщение не происходит ниодного совпадения, поэтому личка не выводится.
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37
Смайлы в чате full Shouldercannon Общие вопросы Delphi 28 30.12.2008 15:48
Skroll box в чате. Dj_smart Общие вопросы Delphi 9 08.03.2008 09:34
Смайлы в чате. Teen4jump Общие вопросы Delphi 5 05.03.2008 21:20
рассылка сообщений всем пользователям в чате, протокол UDP RKS Работа с сетью в Delphi 14 15.12.2007 11:36