Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ICQ Konaktliste (https://www.delphipraxis.net/49619-icq-konaktliste.html)

-=IOI=- 13. Jul 2005 21:00


ICQ Konaktliste
 
Hallo erstmal.

Ich programmier grad nen ICQ Clone mit der TICQClient Kompo. Nun kann ich mir mit der procedure RequestContactList die Kontaktliste vom ICQ Server laden. Mit folgendem Code lese ich dann die Liste aus und schreibe die Einträge in ein ListView:

Delphi-Quellcode:
procedure TForm1.ICQClient1ServerListRecv(Sender: TObject;
  SrvContactList: TList);
var
  i: Word;
  UserInfo: TUINEntry;
  ListItem: TListItem;
begin
  if SrvContactList.Count > 0 then
    begin
    ListView1.Clear;
    LastUser := 0;
    for i := 0 to SrvContactList.Count - 1 do
    begin
      UserInfo := PUINEntry(SrvContactList.Items[i])^;
      if UserInfo.CType = U_VISIBLE_LIST then
        ICQClient1.VisibleList.Add(IntToStr(UserInfo.UIN))
      else if UserInfo.CType = U_INVISIBLE_LIST then
        ICQClient1.InvisibleList.Add(IntToStr(UserInfo.UIN))
      else if UserInfo.CType = U_NORMAL then
      begin
        if ICQClient1.AddContact(UserInfo.UIN) then
        begin
          User[LastUser+1] := TICQUser.Create;
          User[LastUser+1].Nick := UserInfo.Nick;
          User[LastUser+1].Nummer := UserInfo.UIN;
          User[LastUser+1].Status := ICON_OFFLINE;
          User[LastUser+1].Gruppe := UserInfo.CGroupID;
          Inc(LastUser);
          ListItem := ListView1.Items.Add;
          ListItem.ImageIndex := ICON_OFFLINE;
          ListItem.Caption := UserInfo.Nick;
        end;
      end;
    end;
    end;
  ICQClient1.DestroyUINList(SrvContactList);
  ICQClient1.RequestOfflineMessages;
end;
Das klappt auch alles soweit und ich seh alle Leute in der Liste mit einer roten Blume vorne dran. Nun heißt es in der Beschreibung, dass mit der Funktion StatusChange eine Änderung des Status eines Users mitgeteilt wird. Das hab ich dann so umgesetzt:

Delphi-Quellcode:
procedure TForm1.ICQClient1StatusChange(Sender: TObject; UIN: String;
  Status: Cardinal);
var i: Integer;
    FNick: String;
begin
  for i := 1 to LastUser do
  if User[i].Nummer = StrToInt(UIN) then
  begin
    FNick := User[i].Nick;
    case Status of
    S_ONLINE: User[i].Status := ICON_ONLINE;
    S_INVISIBLE: User[i].Status := ICON_INVISIBLE;
    S_AWAY: User[i].Status := ICON_AWAY;
    S_NA: User[i].Status := ICON_NA;
    S_OCCUPIED: User[i].Status := ICON_OCCUPIED;
    S_DND: User[i].Status := ICON_DND;
    S_FFC: User[i].Status := ICON_FFC;
  end;
  end;

  for i := 0 to ListView1.Items.Count - 1 do
  if FNick = ListView1.Items.Item[i].Caption then
  case Status of
  S_ONLINE: ListView1.Items.Item[i].ImageIndex := ICON_ONLINE;
  S_INVISIBLE: ListView1.Items.Item[i].ImageIndex := ICON_INVISIBLE;
  S_AWAY: ListView1.Items.Item[i].ImageIndex := ICON_AWAY;
  S_NA: ListView1.Items.Item[i].ImageIndex := ICON_NA;
  S_OCCUPIED: ListView1.Items.Item[i].ImageIndex := ICON_OCCUPIED;
  S_DND: ListView1.Items.Item[i].ImageIndex := ICON_DND;
  S_FFC: ListView1.Items.Item[i].ImageIndex := ICON_FFC;
  end;
end;
Mein Problem besteht nun darin, dass mir nach dem LogIn nicht automatisch die User, die Online sind angezeigt werden, sondern alle weiterhin eine rote Blume haben. (Falls jetzt einer auf die Idee kommt - es sind User online, mit normalem ICQ getestet).

Wie schaffe ich es also, dass er nach dem Login die einzelnen User auf ihren Status überprüft?

Danke Flo

-=IOI=- 13. Jul 2005 21:17

Re: ICQ Konaktliste
 
Ich glaub ich hab ne Lösung gefunden. Wenn die Hilfe stimmt könnte ich die Liste mit den Contacts durchgehen und nach jedem einzelnen mit der procedure SearchByUIN suchen. Als Ereignis erhalte ich dann OnUserFound, welches mir unter anderem den tatus angibt.

Die Lösung erscheint mir allerdings etwas sehr gewurschtelt.

Wenn also einer noch ne bessere Möglichkeit kennt, dann immer her mit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz