Stimmt, die Lösung von himitsu ist die effizienteste. Der Compiler war aber noch nicht ganz zufrieden. Hier die Korrektur mit einigen Sicherheitsabfragen:
Delphi-Quellcode:
type
TDynStrArray = array of string;
procedure DeleteEntry(var pArray: TDynStrArray; pPos: integer);
begin
// DAU-Schutz ;-)
if ((pPos < 0) or (pPos > High(pArray))) then
exit;
// String löschen
pArray[pPos] := '';
// die nötigen StringPointer verschieben
if (pPos < High(pArray)) then
Move(pArray[pPos + 1], pArray[pPos], (High(pArray) - pPos) * SizeOf(Pointer));
// letzten Pointer löschen ... dieser wurde ja eine Stelle vorkopiert
Pointer(pArray[High(pArray)]) := nil;
// Array verkleinern
SetLength(pArray, High(pArray));
end;
Gruß Hawkeye