Thema: Delphi IRC Userliste

Einzelnen Beitrag anzeigen

RedShakal
(Gast)

n/a Beiträge
 
#12

Re: IRC Userliste

  Alt 27. Jul 2009, 16:35
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 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.
  Mit Zitat antworten Zitat