![]() |
IRC Userliste
Moin moin,
Ich habe ein etwas komisches Problem mit Delphi. Meine IRC Unit ist nach dem Indy Irc Tutorial aufgebaut. Server Connecten -> Channel betretten -> Userliste anzeigen. Funktioniert auch alles soweit prima, leider wird diese Userliste aber nicht geupdatet wenn ein Spieler kommt / geht.
Delphi-Quellcode:
Die Procedure wird ja nur aufgerufen wenn ich den Channel betrette.
procedure TForm3.ChatNames(Sender: TObject; AUsers: TIdIRCUsers;
AChannel: TIdIRCChannel); var i : byte; begin for i:=1 to AUsers.Count-1 do Nicknamen.Items.Add(AUsers.Items[i].Nick); end; Wie muss ich den IRC Client einstellen das die Userliste regelmäßig geupdatet wird? |
Re: IRC Userliste
Ich kenn die Indy IRC-Komponente jetzt nicht so genau, ist 200 Jahre her, dass ich mich mit der mal beschäftigt habe.
Ich denke, Du wirst während einer laufenden Verbindung auf Joins, Quits und Parts reagieren müssen und Deine Userliste dabei aktualisieren. Die komplette Liste wird nur beim Betreten eines Channels vom Server geschickt. Gruß, SirTwist |
Re: IRC Userliste
Ich versuche es zurzeit so:
Delphi-Quellcode:
procedure TForm3.ChatJoin(Sender: TObject; AUser: TIdIRCUser;
AChannel: TIdIRCChannel); begin Nicknamen.Items.Add(AUser.Nick); ChatText.Lines.Add('[' + TimeToStr(time) + '] '+AUser.Nick+' hat die Lobby betreten.'); end;
Delphi-Quellcode:
procedure TForm3.ChatQuit(Sender: TObject; AUser: TIdIRCUser);
begin // Nicknamen.Items.Delete(AUser.Nick); ChatText.Lines.Add('[' + TimeToStr(time) + '] '+AUser.Nick+' hat die Lobby verlassen.'); end; Aber das wirft leider Probleme auf. Beim join entsteht immer eine Leerzeile zwischen den alten Nicks und dem neu hinzugefügten der sich auch mit Itemindex-1 nicht löschen lässt. Bei der Löschfunktion kann man leider nur einen Indexwert angeben. Der Indexwert ist aber leider unbekannt, was bedeutet ich brauche eine möglichkeit um dem namen einen Index zuzuordnen. Das ist sicher wieder nur einer dieser kleinen irgentein Wort vergessen fehler :oops: |
Re: IRC Userliste
Leerzeile: keine Ahnung:
Index: Items bietet dir auch Funktionen zum Suchen ... z.B. Nicknamen.Items.IndexOf |
Re: IRC Userliste
Erscheinen bei deiner Routine ChatNames eigentlich alle Nicks? Ich wundere mich gerade, dass Du Deine for-Schleife von 1 aus starten lässt und nicht von 0.
Setz mal von Deiner Nickliste die Eigenschaft Sorted auf True, wo taucht dann die Leerzeile auf? Vielleicht liefert ChatNames immer einen leeren Eintrag mit. Eventuell könntest Du innerhalb der for-Schleife überprüfen, ob der Nick wirklich leer ist:
Delphi-Quellcode:
if Trim(AUsers.Items[i].Nick) <> '' then Nicknamen.Items.Add(AUsers.Items[i].Nick);
|
Re: IRC Userliste
Die Eigenschaft habe ich zwar bei ListView gesehen, jedoch benutzte ich eine ListBox wo ich den Befehl "IndexOf" leider nicht finden kann.
Muss man da etwas beachten? |
Re: IRC Userliste
ListBox.Items.IndexOf
|
Re: IRC Userliste
Man bin ich heute wieder blind :stupid:
Danke für den Hinweis ich habe das jetzt so gelöst
Delphi-Quellcode:
Was die Leerzeile betrifft:
procedure TForm3.ChatQuit(Sender: TObject; AUser: TIdIRCUser);
var Nick : integer; begin Nick := Nicknamen.Items.IndexOf(AUser.Nick); Nicknamen.Items.Delete(Nick); ChatText.Lines.Add('[' + TimeToStr(time) + '] '+AUser.Nick+' hat die Lobby verlassen.'); end; Wenn Sorted auf True steht, ist sie ganz oben. Die Nicknamen sind alle in der Liste. Habe auch schon geprüft ob vlt Versehentlich eine Leerzeile in der Listbox selber ist aber dies leider auch nicht. Edit: Okay dank SirTwist habe ich jetzt auch das letzte Problem gelöst danke dir! :mrgreen:
Delphi-Quellcode:
procedure TForm3.ChatNames(Sender: TObject; AUsers: TIdIRCUsers;
AChannel: TIdIRCChannel); var i : byte; begin for i:=1 to AUsers.Count-1 do if Trim(AUsers.Items[i].Nick) <> '' then Nicknamen.Items.Add(AUsers.Items[i].Nick); end; |
Re: IRC Userliste
Dennoch bleibt die Frage, was dann in AUsers.Items[0] drin ist, wenn alle Namen erst danach liegen.
|
Re: IRC Userliste
Ich habe AUsers beabsichtigt auf 1 gesetzt, weil 0 immer den Eintrag "Nick" brachte.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz