Du setzt AllExist ja auch wieder auf False statt nur auf True. Gefunden werden kann also nur der letzte Eintrag, da sonst die folgenden den Fund wieder überschreiben...
Dann könntest du den Code auch ordentlicher formatieren, dann kann man das auch besser überblicken...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TClientNameBut.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i, y: Integer; ListItem: TListItem; AllExist: Boolean; begin AllExist := False; for i := 0 to ConnectList.Items.Count-1 do if ConnectList.Items[i].SubItems[0] = Socket.RemoteAddress then begin AllExist := True; y := i; end else AllExist := False; if AllExist then ConnectList.Items[y].SubItems[1] := 'Online' else begin ListItem := ConnectList.Items.Add; ListItem.Caption := Socket.RemoteAddress; ListItem.SubItems.Add(Socket.RemoteAddress); ListItem.SubItems.Add('Online'); end; end; |
Und dann ist da die Frage wofür du AllExist eigentlich brauchst?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TClientNameBut.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i, FoundItem: Integer; ListItem: TListItem; begin FoundItem := -1; for i := 0 to ConnectList.Items.Count-1 do if ConnectList.Items[i].SubItems[0] = Socket.RemoteAddress then begin FoundItem := i; Break; end; if FoundItem >= 0 then ConnectList.Items[FoundItem].SubItems[1] := 'Online' else begin ListItem := ConnectList.Items.Add; ListItem.Caption := Socket.RemoteAddress; ListItem.SubItems.Add(Socket.RemoteAddress); ListItem.SubItems.Add('Online'); end; end; |
// EDIT:
Und dann fällt mir gerade auf...
Socket.RemoteAdress schreibst du in Caption und SubItems[0] und suchst es in Subitems[1]. Da steht aber Online drin...
(entsprechend korrigiert, siehe highlight)