type
loeschart =
(Caption_gleich, Icon_gleich, Beides_gleich, EinsVonBeiden_gleich);
function DoppelteItemsWeg(lv: TListView; art: loeschart): integer;
var x, y: integer;
function Icons: boolean;
begin
result := lv.items[x].imageindex = lv.items[y].imageindex;
end;
function Captions: boolean;
begin
result := lv.items[x].caption = lv.items[y].caption;
end;
procedure weg;
begin
lv.items.delete(y);
inc(result);
end;
begin
x := 0;
result := x;
while x < lv.items.count - 1 do begin
y := x + 1;
while y < lv.items.count do
if (ord(art) in [1, 3]) and Icons then weg else
if (ord(art) in [0, 3]) and Captions then weg else
if (ord(art) = 2) and Captions and Icons then weg
else inc(y);
inc(x);
end;
lv.arrange(arDefault);
end;
// Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('Es wurde(n) ' + inttostr(
DoppelteItemsWeg(ListView1, Caption_gleich)) +
' Item(s) gelöscht.');
end;