So würde es funktionieren:
Delphi-Quellcode:
Finalize(AArray[AIndex]);
System.Move(AArray[AIndex + 1], AArray[AIndex], (Length(AArray) - AIndex - 1) * SizeOf(string));
{letzten Eintrag auf nil setzen, damit keine Referenzzählung für den jetzt doppelten Eintrag bei SetLength erfolgt}
System.FillChar(AArray[Length(AArray) - 1], SizeOf(string), 0); // oder Pointer(AArray[Length(AArray) - 1]) := nil;
SetLength(AArray, Length(AArray) - 1);
Inzwischen ist das wie beschrieben einfacher zu lösen:
Delphi-Quellcode:
System.Delete(AArray, AIndex, 1);
.