Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IRC Userliste (https://www.delphipraxis.net/137704-irc-userliste.html)

RedShakal 27. Jul 2009 00:59


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:
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;
Die Procedure wird ja nur aufgerufen wenn ich den Channel betrette.

Wie muss ich den IRC Client einstellen das die Userliste regelmäßig geupdatet wird?

SirTwist 27. Jul 2009 09:40

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

RedShakal 27. Jul 2009 11:39

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:

himitsu 27. Jul 2009 12:31

Re: IRC Userliste
 
Leerzeile: keine Ahnung:

Index: Items bietet dir auch Funktionen zum Suchen ... z.B. Nicknamen.Items.IndexOf

SirTwist 27. Jul 2009 12:36

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);

RedShakal 27. Jul 2009 12:39

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?

DeddyH 27. Jul 2009 12:41

Re: IRC Userliste
 
ListBox.Items.IndexOf

RedShakal 27. Jul 2009 12:50

Re: IRC Userliste
 
Man bin ich heute wieder blind :stupid:


Danke für den Hinweis ich habe das jetzt so gelöst

Delphi-Quellcode:
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;
Was die Leerzeile betrifft:

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;

himitsu 27. Jul 2009 13:14

Re: IRC Userliste
 
Dennoch bleibt die Frage, was dann in AUsers.Items[0] drin ist, wenn alle Namen erst danach liegen.

RedShakal 27. Jul 2009 13:26

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.
Seite 1 von 2  1 2      

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