Hallo ihr beiden, zwei Dinge hätte ich noch.
Zum einen macht es mich stutzig, dass ein Löschen bei gleicher Caption und differierenden SubItems nicht verlustfrei ist - eventuell vorhandene SubItems sollten doch gerettet werden, oder habe ich das falsch verstanden?
Und zum anderen dient eine ListView der Visualisierung und ist kein Datenspeicher. Hier eine alternative Vorgehensweise beim Einsatz einer virtuellen ListView. Nehmen wir an, die Daten wären in einer StringList gespeichert und die Zeilen hätten folgenden Aufbau:
Code:
Caption1=SubItem1,SubItem2,SubItem3
Dann kann man sie folgendermaßen löschen:
Delphi-Quellcode:
procedure LootSubItems(s: TStrings; iFrom, iTo: integer);
var
i: integer;
sFrom, sTo: TStrings;
begin
sFrom := TStringList.Create;
sFrom.CommaText := s.Values[s.Names[iFrom]];
sTo := TStringList.Create;
sTo.CommaText := s.Values[s.Names[iTo]];
for i := 0 to Pred(sFrom.Count) do
if sTo.Count <= i then
sTo.Add(sFrom[i])
else if sFrom[i] <> '' then
sTo[i] := sFrom[i];
s.Values[s.Names[iTo]] := sTo.CommaText;
sFrom.Free;
sTo.Free;
end;
procedure KillDuplicates(s: TStrings);
var
iLow, iHigh: integer;
begin
for iLow := 0 to s.Count - 2 do
for iHigh := Pred(s.Count) downto Succ(iLow) do
if s.Names[iLow] = s.Names[iHigh] then
begin
LootSubItems(s, iHigh, iLow)
s.Delete(iHigh);
end;
end;
Grüße vom marabu