Zitat:
Kann man das irgendwie optimieren?
Ja.
Da die Liste sortiert ist, brauchst du an dieser Stelle:
Delphi-Quellcode:
For J:=0 To Pred(Clients.Count) Do
SendTo[J]:=(SendTo[J] Or (Clients.Items[J] = Current));
Nicht alle durchgehen, sondern nur ab dem aktuellen einmal hoch und einmal runter solange der Text gleich bleibt.
Delphi-Quellcode:
// Der eigentlich Suchlauf
For I:=0
To Pred(Clients.Count)
Do
If Clients.Selected[I]
Then
Begin
SendTo[I]:=True;
Current:=Clients.Items[I];
SendList:=SendList + Current + '
, ';
J := I+1;
while (Clients.Items[J] == Clients.Items[I])
begin
SendTo[J]:=True;
inc(J);
end;
J := I-1;
while (Clients.Items[J] == Clients.Items[I])
begin
SendTo[J]:=True;
dec(J);
end;
End;