Hallo _frank_!
Danke erstmal für die Mühe!
Habe mir deinen Code mal angeschaut. Ich hatte mich in der Zwischenzeit auch ein wenig informiert und habe eine Frage zu deinem Code:
Delphi-Quellcode:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var auto:TAuto;
i:integer;
begin
ListBox1.Items.clear;
if assigned(node.data) then
begin
src:=TAutos(node.data);
for i:=0 to src.count-1 do
begin
auto:=src.getItem(i); // FRAGE 1
listbox1.items.AddObject(auto.Hersteller+' '+auto.Modell,auto);
end;
end;
end;
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var node:TTreeNode;
autos:TAutos;
auto:TAuto;
begin
node:=(sender as TTreeview).GetNodeAt(x,y);
autos:=TAutos(node.data);
auto:=(Source as TListbox).Items.Objects[(Source as TListbox).Itemindex] as TAuto;
src.Delete(src.indexof(auto)); // FRAGE 2
autos.Add(auto);
Mit "auto:=src.getItem(i);" holst du dir doch nur den Zeiger auf das Objekt, oder? Deswegen ist mir nicht ganz klar, wieso bei "src.Delete(src.indexof(auto));" dieser nicht verworfen wird. Hat das vielleicht was damit zu tun, weil du das Objekt nicht freigibst (weil es ja weiterleben soll)?
Inwiefern hilft hier die ebenfalls für TObjectList zu Verfügung stehende Methode "Extract"?