Witam
Mam sobie 4-kolumnowy ListView posiadający 245 pozycji (liczba ta jest zmienna). Napisałem sobie kod, który wyszukał by mi duplikaty i je usunął:
var
i, j : Integer;
Wiersz, Wiersz2 : String;
begin
for i := 0 to ListView1.Items.Count - 2 do
begin
Application.ProcessMessages;
Wiersz := '';
Wiersz := ListView1.Items[i].Caption + ListView1.Items[i].SubItems[0] + ListView1.Items[i].SubItems[1] + ListView1.Items[i].SubItems[2];
Wiersz := Trim(Wiersz);
for j := ListView1.Items.Count - 1 downto i + 1 do
begin
Wiersz2 := '';
Wiersz2 := ListView1.Items[j].Caption + ListView1.Items[j].SubItems[0] + ListView1.Items[j].SubItems[1] + ListView1.Items[j].SubItems[2];
Wiersz2 := Trim(Wiersz2);
if AnsiUpperCase(Wiersz) = AnsiUpperCase(Wiersz2) then
begin
ListView1.Items.Delete(j);
end;
end;
end;
end;
W sumie działa (duplikatów jest 25), ale gdy dochodzi do końca listy (220 pozycja) program wywala błąd i nie wiem czym to jest spowodowane.
Czy mógłby mi ktoś pomóc w rozwiązaniu tego problemu?
//Do postu poniżej
Pojawia się okienko z taką oto treścią:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00484362 in module 'Project1.exe'. Read address 00000008'. Process stopped. Use Step or Run to continue.
A następnie (po kliknięciu OK) w kodzie wskazywana jest linia:
Wiersz := ListView1.Items[i].Caption + ListView1.Items[i].SubItems[0] + ListView1.Items[i].SubItems[1] + ListView1.Items[i].SubItems[2];