Wenn ich das Problem richtig verstanden habe, sollte es so funktionieren:
Delphi-Quellcode:
function TGridPoint.Assign(Source: TPersistent);
begin
if Source is TGridPoint then
with TGridPoint(Source) do
begin
Self.Position := Position;
// Wenn der obere Punkt noch nicht zugewiesen wurde (sonst gäbe es eine hübsche Endlosschleife)
if (Self.PointAbove = nil) and (PointAbove <> nil) then
begin
Self.PointAbove := TGridPoint.Create; // Hier müsstest du noch einen weiteren Konstruktor hinzufügen
Self.PointAbove.PointUnder := Self;
Self.PointAbove.Assign(PointAbove);
end;
if not Assigned(Self.PointLeft) and Assigned(PointLeft) then
[...]
end
else
inherited;
end;
[edit] Nein, so gäbe es immer noch eine Endlosschleife *weiternachdenk* [/edit]
[edit2] Das Problem ist wirklich verzwickt *g* . Gerade fällt mir nur ein, das Grid temporär in ein zweidimensionales Array zu speichern (wenn das bei deinem Aufbau der Knoten möglich ist) und daraus wieder das Grid zu erstellen oder mit einem Feld in den zu kopierenden Knoten zu kennzeichnen, ob sie schon kopiert wurden. Bei Letzterem könnte man meine Prozedur von oben mit wenigen Änderungen übernehmen. [/edit2]