for z:=Length(Kontaktliste)-1 downto 0 do
Mein zweites Array wird nun verkürzt, aber das letzte Element aus dem ersten Array nimmt es noch immer nicht mit.
Du benutzt immer
Kontaktliste_2[z].Anrede := Kontaktliste[z].Anrede;
etc., aber bis zu dem zu löschenden Eintrag muss es lauten
Kontaktliste_2[z - 1].Anrede := Kontaktliste[z].Anrede;
. Der Index muss dort ja dort unterschiedlich sein, da ein Element "fehlt".
Edit: Und setze die Länge besser vor der Schleife mit
SetLength(Kontaktliste_2, Length(Kontaktliste)-1);
Oder
Kontaktliste_2[High(Kontaktliste_2)].Anrede := Kontaktliste[z].Anrede;
und noch besser 1x nur
Setlength(KontaktListe_2,length(Kontaktliste)-1);
oder
Delphi-Quellcode:
For z:=i+1 to high(KontaktListe_2) do
begin
KontaktListe_2[z-1] := KotaktListe_2[z];
end;
oder ich gehe mal von Record aus...
Delphi-Quellcode:
Move(KontaktListe_2[I+1],KontaktListe_2[I],(Length(KontaktListe_2)-I) * Sizeof(KontaktListe[0])); // Sizeof(Type)
Setlength(KontaktListe_2,Length(KontaktListe_2)-1);
Das würde doch ein Lerneffekt haben... und schneller als eine TList ist es auch...
Mavarik