>>579
なぜにOnChange?

Captionでソートしてあれば
for i := ListView1.Items.Count-1 downto 1 do
 if ListView1.Items[i].Caption = ListView1.Items[i-1].Caption then
  ListView1.Items[i].Delete;

SubItemsでやるならCaptionをSubItemsに変えればよろし。
SubItemsでソートしてから動かせよ。