Delphi-PRAXiS
Seite 2 von 2     12   

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)

DeddyH 27. Jul 2009 13:29

Re: IRC Userliste
 
Ist es so evtl. besser?
Delphi-Quellcode:
procedure TForm3.ChatNames(Sender: TObject; AUsers: TIdIRCUsers;
  AChannel: TIdIRCChannel);
var
  i : byte;
begin
  Nicknamen.Items.BeginUpdate;
  try
    Nicknamen.Items.Clear;
    for i:=0 to AUsers.Count-1 do
      Nicknamen.Items.Add(AUsers.Items[i].Nick);
  finally
    Nicknamen.Items.EndUpdate;
  end;
end;

RedShakal 27. Jul 2009 15:35

Re: IRC Userliste
 
Besteht eigentlich die möglichkeit die Stringnamen zu Filtern?

Die Nicks fangen alle mit KKND|Nick an. Das habe ich gemacht weil ich angst hatte, das ein Nick auf dem Server schon belegt sein könnte. Ich wollte das mittels der Explode funktion die ich im Netz gefunden habe aushebeln so das nur der Nick in der Liste auftaucht.

Delphi-Quellcode:
procedure TForm3.ChatNames(Sender: TObject; AUsers: TIdIRCUsers;
  AChannel: TIdIRCChannel);
var
  i        : byte;
  StrArr   : TDynStringArray;
begin
  if Length(AUsers.Items[i].Nick) > 0 then
    begin
      StrArr := Explode('|', AUsers.Items[i].Nick);
    end;

  for i:=1 to AUsers.Count-1 do
  if Trim(StrArr[1]) <> '' then Nicknamen.Items.Add(StrArr[1]);
end;

Aber die überlegung ist wohl so wie ich sie hatte nicht richtig...

Delphi-Quellcode:
function Explode(const Separator, S :String; Limit :Integer = 0): TDynStringArray;
  var
    SepLen: Integer;
    F, P: PChar;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then
    Exit;
  if Separator = '' then
    begin
      SetLength(Result, 1);
      Result[0] := S;
      Exit;
    end;
  SepLen := Length(Separator);

  P := PChar(S);
  while P^ <> #0 do
    begin
      F := P;
      P := AnsiStrPos(P, PChar(Separator));
      if (P = nil) or ((Limit > 0) and (Length(Result) = Limit - 1)) then
        P := StrEnd(F);
      SetLength(Result, Length(Result) + 1);
      SetString(Result[High(Result)], F, P - F);
      F := P;
      if P = Separator then
        SetLength(Result, Length(Result) + 1);
      while (P^ <> #0) and (P - F < SepLen) do
        Inc(P);
    end;
end;
Die Funktion teilt die Strings auf in StrArr[0] , StrArr[1], etc


Delphi-Quellcode:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt kknd.exe ist eine Exception der Klasse EListError aufgetreten. Meldung: 'Listenindex überschreitet das Maximum (56)'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK  Hilfe  
---------------------------


PS:

Zitat:

Zitat von DeddyH
Ist es so evtl. besser?
Delphi-Quellcode:
procedure TForm3.ChatNames(Sender: TObject; AUsers: TIdIRCUsers;
  AChannel: TIdIRCChannel);
var
  i : byte;
begin
  Nicknamen.Items.BeginUpdate;
  try
    Nicknamen.Items.Clear;
    for i:=0 to AUsers.Count-1 do
      Nicknamen.Items.Add(AUsers.Items[i].Nick);
  finally
    Nicknamen.Items.EndUpdate;
  end;
end;

Die Nicks bekommt man nur vom Server geschickt, wenn man einen Channel betritt.

DeddyH 27. Jul 2009 15:53

Re: IRC Userliste
 
Was versuchst Du denn da? Das Zerlegen muss schon mit in die Schleife, sonst macht es ja keinen Sinn.
Delphi-Quellcode:
procedure TForm3.ChatNames(Sender: TObject; AUsers: TIdIRCUsers;
  AChannel: TIdIRCChannel);
var
  i        : byte;
  StrArr   : TDynStringArray;
begin
  for i:=0 to AUsers.Count-1 do
    begin
      if Length(AUsers.Items[i].Nick) > 0 then
        begin
          StrArr := Explode('|', AUsers.Items[i].Nick);
          if (Length(StrArr) > 1) and (Trim(StrArr[1]) <> '') then
            Nicknamen.Items.Add(StrArr[1]);
        end;
    end;
end;
Ungetestet.

RedShakal 27. Jul 2009 16:09

Re: IRC Userliste
 
Super genau das was ich gesucht hab :thumb:

SirTwist 27. Jul 2009 16:10

Re: IRC Userliste
 
Sag mal, was genau versuchst Du da eigentlich? Wieso haben alle Chatter den gleichen Nick?

Wenn es Dir nur darum geht, einen (immer gleichen) Text am Anfang abzutrennen, musst Du nicht unbedingt mit dynamischen String-Arrays und einer Explode-Funktion rumspielen...
Delphi-Quellcode:
if SameText(Copy(s, 1, 5), 'KKND|') then s := Copy(s, 6, 999);
sollte genauso gehen.

DeddyH 27. Jul 2009 16:12

Re: IRC Userliste
 
Oder AnsiStartsText ;)

RedShakal 27. Jul 2009 16:17

Re: IRC Userliste
 
Ich habe ein kleines Login Script mit Chatlobby geschrieben und will das im Chat die User den gleichen Nick haben wie sie im Login angegeben haben. Ich bin auf einen IRC Server ausgewichen und hatte Angst das evtl einer der Nicks schon vergeben sein könnte. Deshalb habe ich jeden Nick Programmintern umbenennen lassen so das z.b. Test im chat dann KKND|Test heißt.

SirTwist 27. Jul 2009 16:42

Re: IRC Userliste
 
Wäre es da nicht einfacher, einen eigenen irc-server zu betreiben? Für Linux gibts den ircd, der ist recht einfach zu konfigurieren. Für Windows wüsste ich jetzt aus dem Bauch heraus nichts, aber da gibt es bestimmt auch was.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr.
Seite 2 von 2     12   

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