Autor Beitrag
phogl
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 67

Windows 98,2000Pro,XPPro, SuSE Linux 9.0
D5Stad D7Pers D2005Pers
BeitragVerfasst: Fr 05.05.06 18:32 
Hi!

Ich hab mir grad mal das ICQLib mit dem TICQClient angeguckt und finds an sich super, eine frage die sich mir nur grad stellt ist wie ich damit den Userstatus herausfinde (also ob ein User Online/Offline/Away etc. ist). Hab jetzt gegoogelt, bin aber erfolglos geblieben. Wär super wenn jemand eine Lösung hätte und die hier Posten würde, für Lösungsansätze bin ich auch schon dankbar weil ich das ICQ-Protokoll so gut wie garnicht kenne.

Danke schonmal ;)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Do 07.09.06 12:00 
ICQClientStatusChange => UIN und Status, den kannst du durch die konstanten in ICQWorks auslesen also z.B.
ausblenden Delphi-Quelltext
1:
2:
 if Status<>statustoint(S_Offline)then
  ShowMessage(UIN+' online');

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Sa 09.09.06 11:52 
@Xion, leider beantwortest du die Frage nur passiv.
Ich habe das selbe Problem :-(, diese Funktion ist passiv, wenn man die Benutzerliste erhält kann man trotzdem nicht abfragen ob ein User online ist.
Ich auch schon einiges versucht, aber nix erreicht :-(, damit "Ich" abfragen kann.
Ich hab mal was von so nem link gehört und werds jetzt so versuchen:
ausblenden Quelltext
1:
http://web.icq.com/whitepages/online?icq=[ICQ-Nummer]&img=x					

Dieser Link ^^ gibt ein Bild aus, entweder mit roter oder grüner blume.
Ich werd dieses bild mit URLMon runterladen und dann vergleichen, mal schaun obs was wird, vll schreib ich ne kleine Unit und schick die hoch ...
MfG Fighter#1

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 09.09.06 12:10 
Hi
passiv reicht doch, hätte ich gedacht?
bei meinem prog funzt das so: wenn ich mich einlogge, dann bekomme ich für die User, die online sind eine message über ICQClientStatusChange. Dann hab ich je ne Liste für online und offline. Die offline Liste lade ich mit RequestContactList, ICQClientServerListRecv. Die von ICQClientStatusChange verschiebe ich in die online-Liste. Jetzt hab ich 2Listen mit on/offline-Leuten. wenn jetzt jemand off geht, dann krieg ich ja wieder die message und verschieb dementsprechend. So weiß ich immer wer on bzw. off ist.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Mi 13.09.06 13:29 
Hey XION
Als ich deine Antwort las, dachte ich du hättest recht, jetzt mach ich mein eigenes ICQ mit der Komponente, klappt ALLES bis auf die Funktion Status Change, muss ich da noch irgendwas einstellen?.
Hab jetzt einfach mal nur ein ShowMessage reingemacht das die UIN anzeigt.
Es geht nix auf, auch wenn ich weiß das einer aus der Kontaktliste online ist, da ich 2 Accs parallel laufen lass (mein ICQ und normales).
Wo liegt der Fehler?

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 13.09.06 15:04 
hast du das ShowMessage in OnStatusChange? sonst weiß ich auch net...

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Mi 13.09.06 20:04 
@Xion, bin zwar nicht der eingefleischeste Delphifreak aber soviel versteh ich :-D
Hab jetzt schon einiges Probiert. :-(
Beim Icq Clienten muss da DisableDirectConnections auf True Sein?
die anderen Sachen ham meinermeinung nach nix damit zu tun-

Bidde Helft mir

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 13.09.06 20:55 
du musst vermutlich ICQClientServerListRecv bekommen, also... ICQClient.RequestContactList; Dabei musst du beachten, dass er sich schon eingeloggt hat...hmm, ansonsten fällt mir nix ein...hast du vielleicht den Code, den du beim einloggen hast? Damit könnt man vielleicht was machen...

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 13.09.06 21:07 
aah, ich seh grad, bei mir funzt das auch so nicht...hmmm. das problem ist das statustoint nicht funzt...du hast sicherlich ne if-abfrage mit if Status=statustoint(S_Online) then das funzt so leider nicht...muss ich mal gucken wie ich das hinbekomm...der Status ist nämlich nich S_Online. Ich hab ne if Abfrage mit if S_Offline else ... => es is bei mir noch nie einer off gegangen, aber on krieg ich mit ;) muss ich mal gucken...

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 13.09.06 21:12 
der off-status ist anscheinend 268500992...seltsam irgendwie

//Oder der für Away oder Invis usw... ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Do 14.09.06 11:20 
Also, ich bin ja schon recht weit mit dem ICQ, ich zeig dir einfach mal etwas Code.

ausblenden Login (ausgelöst durch Button)
1:
2:
3:
4:
5:
ICQClient1.ICQServer := 'login.icq.com';
ICQClient1.ICQPort := 5190;
IcqClient1.UIN:=StrToInt(Edit1.Text);
IcqClient1.Password:=Edit2.Text;
icqClient1.Login;


ausblenden Hier von der Komponente das OnLogin Event
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Edit1.Enabled:=False;
edit2.Enabled:=False;
Button1.Enabled:=False;

Statusbar1.Panels.Items[0].Text:='Verbindung aufgebaut';
Screen.Cursor:=crDefault;
ListBox1.Clear;
IcqClient1.RequestContactList;

Image1.Picture.LoadFromFile('sign\liciq_on.jpg');


ausblenden Meine OnServerListRecv
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
var
  i: Word;
  UserInfo: TUINEntry;
  x:Integer;
begin
Statusbar1.Panels.Items[1].Text:='Empfange Userlist';
    for i := 0 to SrvContactList.Count - 1 do
    begin
      UserInfo := PUINEntry(SrvContactList.Items[i])^;
      if Length(IntToStr(UserInfo.UIN))= 9 then
        begin
              nickliste.Add(UserInfo.Nick);
               CurChats.Items.Add(UserInfo.Nick);
              uinListe.add(IntToStr(UserInfo.Uin));
        end;
    end;
 ICQClient1.DestroyUINList(SrvContactList);
 Statusbar1.Panels.Items[1].Text:='Userliste erhalten';

   //Chats vorbereiten!
   SetLength(chats,nickliste.Count);
  For x:=0 To Nickliste.Count - 1 do begin
 chats[x].uin:=StrToInt(uinListe.Strings[x]);
 chats[x].nick:=NickListe.Strings[x];
 chats[x].chat:=TStringList.Create;
 chats[x].chat.Text:=('LICIQ Chat');
  end;


ausblenden OnStatusChange
1:
2:
ShowMessage(UinToNick(StrToInt(uin))+' : '+IntToStr(Status));
ListBox1.Items.Add(uintonick(StrToInt(uin)));


So das ist glaub ich das wichtigste :-)

Hoffentlich kannst du daraus schon was schließen.

Achso, wenn eineer Offline geht gibts dafür ne extra procedure...

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Do 14.09.06 14:08 
user profile iconFighter#1 hat folgendes geschrieben:


ausblenden Login (ausgelöst durch Button)
1:
2:
3:
4:
5:
ICQClient1.ICQServer := 'login.icq.com';
ICQClient1.ICQPort := 5190;
IcqClient1.UIN:=StrToInt(Edit1.Text);
IcqClient1.Password:=Edit2.Text;
icqClient1.Login;



so hab ich das auch...

user profile iconFighter#1 hat folgendes geschrieben:


ausblenden Hier von der Komponente das OnLogin Event
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Edit1.Enabled:=False;
edit2.Enabled:=False;
Button1.Enabled:=False;

Statusbar1.Panels.Items[0].Text:='Verbindung aufgebaut';
Screen.Cursor:=crDefault;
ListBox1.Clear;
IcqClient1.RequestContactList;

Image1.Picture.LoadFromFile('sign\liciq_on.jpg');


das hab ich auch so...

user profile iconFighter#1 hat folgendes geschrieben:

ausblenden Meine OnServerListRecv
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
var
  i: Word;
  UserInfo: TUINEntry;
  x:Integer;
begin
Statusbar1.Panels.Items[1].Text:='Empfange Userlist';
    for i := 0 to SrvContactList.Count - 1 do
    begin
      UserInfo := PUINEntry(SrvContactList.Items[i])^;
      if Length(IntToStr(UserInfo.UIN))= 9 then
        begin
              nickliste.Add(UserInfo.Nick);
               CurChats.Items.Add(UserInfo.Nick);
              uinListe.add(IntToStr(UserInfo.Uin));
        end;
    end;
 ICQClient1.DestroyUINList(SrvContactList);
 Statusbar1.Panels.Items[1].Text:='Userliste erhalten';

   //Chats vorbereiten!
   SetLength(chats,nickliste.Count);
  For x:=0 To Nickliste.Count - 1 do begin
 chats[x].uin:=StrToInt(uinListe.Strings[x]);
 chats[x].nick:=NickListe.Strings[x];
 chats[x].chat:=TStringList.Create;
 chats[x].chat.Text:=('LICIQ Chat');
  end;



hier musst du auf jeden fall bei
ausblenden Delphi-Quelltext
1:
if Length(IntToStr(UserInfo.UIN))= 9 then					

aufpassen, denn ich kenn jemanden der hat eine 8-stellige ICQNr. ;)

ausblenden Delphi-Quelltext
1:
 ICQClient1.DestroyUINList(SrvContactList);					

diese zeile hab ich nicht...daran könnte es meiner meinung nach liegen

user profile iconFighter#1 hat folgendes geschrieben:

ausblenden OnStatusChange
1:
2:
ShowMessage(UinToNick(StrToInt(uin))+' : '+IntToStr(Status));
ListBox1.Items.Add(uintonick(StrToInt(uin)));


das müsste auch passen, egal was UINToNick macht bekommst du ja auf jeden fall ne Message.

user profile iconFighter#1 hat folgendes geschrieben:

Achso, wenn eineer Offline geht gibts dafür ne extra procedure...

oh, thx...hatte ich noch gar nicht gesehen

probier mal, ob er dir bei OnError was sagt...

Xion

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Fr 15.09.06 13:24 
Supi danke für die Ausfürliche antwort.
Also dann werd ich mal gucken :-)
Also OnError zeigt nix an (hab ich mir mal eine ShowMessage reingebaut)
UINToNick ist eine Prozedur die mir ne Menge Ärger mit umformen spart. (Hab ich mir gebastelt mit meinen beiden Listen (UIN und NICKListe)

OK das mit dem DestroyUINList tu ich mal raus...
so.
mal sehn was passiert.
ändert sich nix :-(, is jetzt nichtmehr drinne und auch nach mehrmaligem Statuswechsel ändert sich nichts.

Gehts bei dir denn jetzt?

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 15.09.06 14:03 
bei mir hat es ja im prinzip schon von anfang an funktioniert, ich hab nur das mit dem Offline-gehen noch nicht gewusst ;) hab ich jetzt reingebaut, funzt prima. Aber warums bei dir nicht geht...hmmm...aber eine ContactList bekommst du schon, oder? Oder geht das auch nicht? dann musst mal passwort und ICQNr checken. Ansonsten...vielleicht bis du ja mit dem einen Account in der Invis-List des andren. Dann siehst du nicht, wann der on ist *g* ich weiß, extrem weit hergeholt, aber möglich ists trotzdem ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: So 17.09.06 10:25 
So, nach der ein und anderen PN ... mit Xion habe ich durch seine Unterstützung das Problem lösen können.
Eigentlich stimmte schon alles, bis darauf, dass man dem ICQClienten jeden Kontakt adden muss, sieht dann etwa so aus:
ausblenden OnServerListRcv
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  i: Word;
  UserInfo: TUINEntry;
begin
    for i := 0 to SrvContactList.Count - 1 do
    begin
      UserInfo := PUINEntry(SrvContactList.Items[i])^;
      if Length(IntToStr(UserInfo.UIN))= 9 then
        begin
               IcqClient1.AddContact(UserInfo.UIN);
               DeineKontaktListe.Items.Add(UserInfo.Nick);        
        end;
    end;

Und dann funktioniert auch die onStatusChange funktion

Viel Spaß Fighter#1

Zudem kann ich mit an sicherheit grenzender wahrscheinlichkeit sagen, dass im OnStatusChange der Status 26850092 für Online und 26850093 für abwesend steht.

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse


Zuletzt bearbeitet von Fighter#1 am Mo 18.09.06 18:23, insgesamt 1-mal bearbeitet
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 17.09.06 12:46 
user profile iconFighter#1 hat folgendes geschrieben:

Zudem kann ich mit an sicherheit grenzender wahrscheinlichkeit sagen, dass im OnStatusChange der Status 26850092 für Online und 26850092 für abwesend steht.


*g* wo ist der Unterschied zwischen 26850092 und 26850092???

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Mo 18.09.06 18:25 
user profile iconFighter#1 hat folgendes geschrieben:
Zudem kann ich mit an sicherheit grenzender wahrscheinlichkeit sagen, dass im OnStatusChange der Status 26850092 für Online und 26850093 für abwesend steht.


Tja der unterschied zwischen 26850092 und 2680093 beträgt zwar nicht einmal ein Prozent, ist aber dennoch nachweisbar, ...
Nee is klar. Hab den Fehler behoben, dass unschuldige User nicht denken, hä? is der blöd?

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse