Du kannst im TListview keine Nebenspalten "löschen", höchstens leeren.
Das liegt daran, dass nur der eintrag der jeweils ersten Spalte "real" ist. Die anderen sind nur items in der SubItems-Stringlist.
Das mit dem Nachrücken lässt sich aber recht einfach "simulieren", in dem du eine FOR-Schleife einfügst.
Ich würde das ganze so machen:
Das hier tut, was du willst.
Bitte nicht nur kopieren, auch verstehen...
Delphi-Quellcode:
procedure Einruecken;
var
Index_Column: Integer;
Index_Line: Integer;
begin
for Index_Column := 0 to ListView.Columns.Count - 2 do
begin
Index_Line := 0;
while Index_Line < ListView.Items.Count - 1 do
begin
if Length(ListView.Items.Item[Index_Line].SubItems.Strings[Index_Column]) = 0 then
begin
ListView.Items.Item[Index_Line].SubItems.Strings[Index_Column] := ListView.Items.Item[Index_Line + 1].SubItems.Strings[Index_Column];
ListView.Items.Item[Index_Line + 1].SubItems.Strings[Index_Column] := '';
end else
begin
Inc(Index_Line);
end;
end;
end;
end;