Autor Beitrag
Robii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Fr 26.06.09 15:38 
Hallo, ich hab folgenden Code geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
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 begin
    If ConnectList.Items[i].SubItems[1] = Socket.RemoteAddress
     Then begin AllExist:= True; y:= i; end
     Else begin AllExist:= False; end;
  end;
  If AllExist
    Then begin ConnectList.Items[y].SubItems[1] := 'Online'end
    Else Begin
      ListItem := ConnectList.Items.Add;
      ListItem.Caption := Socket.RemoteAddress;
      ListItem.SubItems.Add(Socket.RemoteAddress);
      ListItem.SubItems.Add('Online');
    End;
end;


Der Sinn des Codes ist es, zu überprüfen, wenn schon eine Verbindung vorhanden ist, keine neue in meine ConnectList zu adden, sondern den Status einfach von 'Offline' nach 'Online' zu ändern. Aber das funktioniert bei mir nicht, es wird immer eine neue Verbindung geaddet. Beim debuggen ist mir aufgefallen, das AllExist immer False bleibt, obwohl sie ja, wenn es die Verbindung schon gibt auf True ändern müsste?

Gruß.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.06.09 15:53 
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...
ausblenden 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?
ausblenden 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)
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Fr 26.06.09 16:05 
Besten Dank für die Hilfe habs verstanden & klappt jetzt.
Gruiß