Ich glaube ich habs:
Delphi-Quellcode:
procedure TKontakt.Assign(Source: TKontakt);
begin
Name := Source.Name;
Alter := Source.Alter;
end;
Und:
Delphi-Quellcode:
procedure TKontaktCollection.Assign(Source: TKontaktCollection);
var
i: Integer;
kontakt: TKontakt;
begin
for i := 0 to source.count-1 do
begin
kontakt := TKontakt.Create;
kontakt.Assign(source.Items[i]);
Add(kontakt);
end;
end;
Der Test:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
TempCollection: TKontaktCollection;
i: Integer;
begin
TempCollection := TKontaktCollection.Create;
try
TempCollection.Assign(Adressen);
for i := 0 to TempCollection.Count - 1 do
begin
TempCollection.Items[i].Name := TempCollection.Items[i].Name + ' ist doof.';
ListBox2.Items.Add(TempCollection.Items[i].Name);
end;
finally
TempCollection.Free;
end;
end;
und:
Delphi-Quellcode:
procedure TForm1.UpdateLB1;
var
i: Integer;
begin
Listbox1.Clear;
for i := 0 to Adressen.Count - 1 do
ListBox1.Items.Add(Adressen.Items[i].Name + ', ' + IntToStr(Adressen.Items[i].Alter));
end;
Die
TempCollection wird am Ende der Procedure ja freigegeben. Wären jetzt nur Pointer in der Liste, würde Prozedur
UpdateLB1 gar nichts mehr ausgeben - tut sie aber. Ergo wurden die Objekte kopiert und nicht nur die Pointer. Oder sehe ich das falsch?
Im Anhang das ganze Projekt.