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.