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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 08:46   #1
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию TICQClient Контакт лист

Добрый день, подскажите как опредилить в сети контакт или нет, я запрашиваю список контактов вот так(с горем попалам загрузил)...
Код:
var
i:word;
UserInfo:TUINEntry;
begin
for i:=0 to SrvContactList.Count-1 do
  begin
  UserInfo:=PUINEntry(SrvContactList.Items[i])^;
    if userinfo.CType=0 then
     begin
      with form2.sListView1.Items.Add do
      begin
      imageindex:=12;
      end;

      with form2.sListView2.Items.Add do
      begin
       imageindex:=36;
      subitems.Add(userinfo.Nick);
      subitems.Add(inttostr(userinfo.UIN));
      end;
     end;
  end;

  ICQ.DestroyUINList(SrvContactList);
end;
В демке каторая идет с компанентом написана Х И Н Е Я полная... Третий день нимагу там разобратся, все методам тыка пишу ... вот что там написано:
Код:
procedure TfrmMain.ICQClientServerListRecv(Sender: TObject;
  SrvContactList: TList);
var
  i : LongInt;
  UserInfo: TUINEntry;
  UINNickItem : PUINNickItem;
begin
  //Список контактов может прийти по частям!
  //Версия 1.26 это не учитывала!
  //Очищаем списки только тогда, когда сделали новый запрос списка контактов
  if FullReloadContactList then
    begin
      FullReloadContactList := False;
      lstContactList.Clear;
      UINNickList.Clear;
    end;
  if SrvContactList.Count > 0 then
    for i := 0 to SrvContactList.Count - 1 do
      begin
        UserInfo := PUINEntry(SrvContactList.Items[i])^;
        if UserInfo.CType = 0 then  //если это пользователь (CType = 0), то добавляем в список
          begin
            lstContactList.AddItem(UserInfo.Nick + ' (' + IntToStr(UserInfo.UIN) + ') - ' + GetStatusFor(UserInfo.UIN), Self);
            GetMem(UINNickItem, SizeOf(UINNickItem^));
            UINNickItem^.UIN := UserInfo.UIN;
            UINNickItem^.Nick := UserInfo.Nick;
            UINNickList.Add(UINNickItem);
          end;
      end;

  ICQClient.DestroyUINList(SrvContactList);
end;
я так понимаю в примере, статус пользователя опредиляет
Код:
GetStatusFor(UserInfo.UIN)
я нигде нинашол объевления этой процедуры!!! А по другому она не работает... что делать помагите
aesoem вне форума Ответить с цитированием
Старый 30.07.2009, 12:47   #2
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию

Ответа на форуме я не нашол! ! !
aesoem вне форума Ответить с цитированием
Старый 31.07.2009, 20:57   #3
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию

ну вобщем рас ответа нет... проблему я уже и сам пачти решил...
Вот только незнаю...наверно я с константами напортачил
Код:
procedure TForm1.ICQStatusChange(Sender: TObject; UIN: String;
  Status: Cardinal);
var
i:Integer;
begin
 for i:=0 to slistview1.Items.Count-1 do
if slistview1.Items.Item[i].SubItems[1]=uin then
begin
if status=$00000000 then
  begin
slistview1.Items.Item[i].Caption:='â ñåòè';
slistview1.Items.Item[i].ImageIndex:=0;
  end;
if status=$00005000 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, äîìà';
slistview1.Items.Item[i].ImageIndex:=9;
  end;
if status=$00006000 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, íà ðàáîòå';
slistview1.Items.Item[i].ImageIndex:=10;
  end;
if status=$00004000 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, äåïðåñèÿ';
slistview1.Items.Item[i].ImageIndex:=8;
  end;
if status=$00003000 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, çëîé';
slistview1.Items.Item[i].ImageIndex:=0;
  end;
if status=$00000100 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, íåâèäèìûé';
slistview1.Items.Item[i].ImageIndex:=6;
  end;
if status=$00000011 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, çàíÿò';
slistview1.Items.Item[i].ImageIndex:=4;
  end;
if status=$00000001 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, îòàøîë';
slistview1.Items.Item[i].ImageIndex:=2;
  end;
if status=$00000005 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, íåäîñòóïåí';
slistview1.Items.Item[i].ImageIndex:=3;
  end;
if status=$00000013 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, íå áåñïàêîèòü';
slistview1.Items.Item[i].ImageIndex:=5;
  end;
if status=$00000020 then
  begin
slistview1.Items.Item[i].Caption:='Â ñåòè, ãîòîâ ïîáàëòàòü';
slistview1.Items.Item[i].ImageIndex:=1;
  end;


smemo1.SelAttributes.Color:=sColorSelect5.ColorValue;
smemo1.Lines.Add(uin + ' контак в сети.');
end;

end;
в отчете выбиваются намера, типа они в онлайне... а в listview ничего неменяется...типа все OFF .. Я так понимаю это происходит из за неверно установленной костанты? впринципе они подходят...может там еще какието есть? если в них проблема
aesoem вне форума Ответить с цитированием
Старый 15.08.2009, 17:12   #4
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

у меня вопрос...мне нужно чтоб я мог вписать номер в Edit1, и на него отправить сообщение! при коде
Код:
ICQClient2.sendMessage(Edit1.text, memo1.Lines.Text);
даёт ошибку!

помогите плзз! зарание спасибо!

Последний раз редактировалось hacknet; 15.08.2009 в 18:53.
hacknet вне форума Ответить с цитированием
Старый 16.08.2009, 01:22   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там параметр UIN типа Cardinal(если все верно помню)
так что переводите текст в число(StrToInt)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 02:22   #6
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию

на delphiexpert.ru был исходник аськи там все подробно было описано. Ищи в разделе исходники и компоненты на delphiexpert.ru
xakkkkker вне форума Ответить с цитированием
Старый 16.08.2009, 18:51   #7
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
там параметр UIN типа Cardinal(если все верно помню)
так что переводите текст в число(StrToInt)
не мог ли бы с этим помочь...не получается перевести!?

p.s конечно если вам не трудно!
hacknet вне форума Ответить с цитированием
Старый 16.08.2009, 20:01   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
ICQClient2.sendMessage(StrToInt(Edit1.text), memo1.Lines.Text);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.10.2010, 17:30   #9
andrush-karamush
Новичок
Джуниор
 
Регистрация: 04.10.2010
Сообщений: 2
Радость

В демке каторая идет с компанентом написана Х И Н Е Я полная... Третий день нимагу там разобратся, все методам тыка пишу ... вот что там написано:
Код:
procedure TfrmMain.ICQClientServerListRecv(Sender: TObject;
  SrvContactList: TList);
var
  i : LongInt;
  UserInfo: TUINEntry;
  UINNickItem : PUINNickItem;
begin
  //Список контактов может прийти по частям!
  //Версия 1.26 это не учитывала!
  //Очищаем списки только тогда, когда сделали новый запрос списка контактов
  if FullReloadContactList then
    begin
      FullReloadContactList := False;
      lstContactList.Clear;
      UINNickList.Clear;
    end;
  if SrvContactList.Count > 0 then
    for i := 0 to SrvContactList.Count - 1 do
      begin
        UserInfo := PUINEntry(SrvContactList.Items[i])^;
        if UserInfo.CType = 0 then  //если это пользователь (CType = 0), то добавляем в список
          begin
            lstContactList.AddItem(UserInfo.Nick + ' (' + IntToStr(UserInfo.UIN) + ') - ' + GetStatusFor(UserInfo.UIN), Self);
            GetMem(UINNickItem, SizeOf(UINNickItem^));
            UINNickItem^.UIN := UserInfo.UIN;
            UINNickItem^.Nick := UserInfo.Nick;
            UINNickList.Add(UINNickItem);
          end;
      end;

  ICQClient.DestroyUINList(SrvContactList);
end;
я так понимаю в примере, статус пользователя опредиляет
Код:
GetStatusFor(UserInfo.UIN)
я нигде нинашол объевления этой процедуры!!! А по другому она не работает... что делать помагите[/QUOTE]

А я нашёл объявление к этой процедуре))) Она находится в той же папке с демкой, в отдельном модуле) ток я его имя не помню. Я определяю так: придерживая клавишу Ctrl жму на ту процедуру или функцию или переменную или любую другую вещь, и делфи сам указывает где она находится, открывая если надо тот самый модуль и переводя курсор прямо в начало строки, где находится описание этой переменной или подпрограммы ))
andrush-karamush вне форума Ответить с цитированием
Старый 08.10.2010, 21:09   #10
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

много причин почему может не работать. пиши в асю.
osu
Pasha_Sh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу зайти в контакт. Chudo4258 Свободное общение 26 29.07.2010 01:23
контакт лист DeDoK Общие вопросы Delphi 10 12.06.2009 19:19
ICQClient контакт-лист DOLBY Компоненты Delphi 6 14.11.2008 22:38