Hallo Dominik,
noch ein paar alternative Überlegungen:
(1) Hier könnte eine virtuelle ListBox zum Einsatz kommen, bei der die Daten von einer StringList geliefert werden, welche als Ringspeicher genutzt wird. Dadurch müssen die String-Zeiger in der Liste beim Überlauf nicht jedesmal verschoben werden.
(2)
Delphi-Quellcode:
function CopySelected(clb: TCustomListBox): string;
var
lb: TListBox;
begin
lb := TListBox.CreateParented(HWND(-3));
clb.CopySelection(lb);
Result := lb.Items.Text;
lb.Free;
end;
Grüße vom marabu