Naja, ich verwende immer gerne TList, weil da das ganze Array Pipapo schon gemacht ist.
Ich hab mal ein Beispiel wie das gehen könnte, ohne TList zu überschreiben, was natürlich noch sauberer wäre.
Sieht vielleicht auf den ersten Blick etwas kompliziert aus, aber du kannst so auf alle Methoden von TList zugreifen.
ACHTUNG: Hier werden Pointer auf TPoint kopiert!!! keine Werte. D.h. Liste1 zeigt auf die gleichen TPoint wie Liste2.
Deshalb darfst du die auch in L1 nicht freigeben.
Wenn du das nicht willst, kannst du schon mit deinem Ansatz und Move arbeiten. Auch hier zeigt dir der Sourcecode von TList wie das geht. Sonst mit TList die Werte wirklich einzeln kopieren.
Code: Alles auswählen
uses types;
Procedure TForm1.Button1Click(Sender:TObject);
Var L1,L2: TList;
pt: PPoint;
i: integer;
Begin
L1 := TList.Create;
new(pt);
pt^ := Point(10,20);
L1.Add(pt);
new(pt);
pt^ := Point(20,50);
L1.Add(pt);
L2 := TList.Create;
L2.Assign(L1);
L1.free;
new(pt);
pt^ := Point(30,80);
L2.Insert(0,pt);
For i:=0 To L2.Count-1 Do
writeln(PPoint(L2[i])^.X,' ',PPoint(L2[i])^.Y);
For i:=0 To L2.Count-1 Do
Dispose(PPoint(L2[i]));
L2.free;
End;