Чтобы получить контакт-лист с сервера, нужно послать запрос на сервер на получение этого списка. Запрос посылается спустя несколько секунд после подключения к серверу (логина) и выглядит следующим образом: icqclient1.RequestContactList;
После того, как мы послали запрос, должен придти ответ от сервера в виде события onServerListRecv. Поэтому мы прямиком идём в обработчик этого события:
procedure TForm1.ICQClient1ServerListRecv(Sender: TObject;
SrvContactList: TList);
var
UserInfo: TUINEntry;
i: integer;
begin
if czap.Caption = '0' then
begin //очищаем список только если загружается первая часть
czap.Caption := '1';
sl.Clear;
end;
if SrvContactList.Count > 0 then
for i := 0 to SrvContactList.Count - 1 do
begin
UserInfo := PUINEntry(SrvContactList.Items[i])^;
sl.Items.Add.Caption:= UserInfo.Nick;
sl.Items.Item[form7.sl.Items.Count-1].SubItems.Add(inttostr(UserInfo.UIN));
sl.Items.Item[form7.sl.Items.Count-1].SubItems.Add(inttostr(UserInfo.CTag));
sl.Items.Item[form7.sl.Items.Count-1].SubItems.Add(inttostr(UserInfo.CGroupID));
sl.Items.Item[form7.sl.Items.Count-1].SubItems.Add(inttostr(UserInfo.CType));
sl.Items.Item[form7.sl.Items.Count-1].SubItems.Add(inttostr(integer(UserInfo.Authorized)));
end;
ICQClient1.DestroyUINList(SrvContactList);
end;
Здесь для отображения списка используется стантартный компонент Tlistview. В него добавляются такие данные, как ник, уин, id контакта и id группы контакта. Однако вы можете убрать те строки, где добавляются данные, которые вам не нужны. Здесь приводится только общая концепция получения серверного контакт-листа.
Важно!!!
Обратите внимание, что контакт лист может придти не весь сразу, а по частям (если в списке много контактов). Поэтому список очищается, если загружается первая часть. Для идентификатора я использовал значение Tlabel.caption, и запрос на получение списка контактов у меня выглядит следующим образом:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
{запрос контак листа при первом запуске}
timer1.Enabled:=false;
form1.czap.Caption := '0';
icqclient1.RequestContactList;
end;
Вот в принципе и всё. Если что непонятно - спрашивайте