Hallo Wissende,
ich bin jetzt langsam am verzweifeln, mit dem TcxTreeList. Entweder es vergisst Knoten oder alles haut nicht hin. Vielleicht liegts ja auch auch mir ...
Also, ich will einen Baum im TcxTreelist darstellen, dann speichern und wieder anzeigen. Wo der gespeichert wird, sollte erst einmal egal sein. Auf alle fälle sollte der User die Möglichkeit haben, den Knoten umzuhängen... und da fängt das Problem an. Wenn der das Tut, kommt meine Routine (speichern oder laden) durcheinander und zeigt mir anschliessend nur noch Datenchaos an. Wießt Ihr wo der Fehler liegt?
Hier meine LadeRoutine:
Delphi-Quellcode:
function TForm2.TreeAddNode(
const aParent: TcxTreeListNode;
const Values:
array of Variant;
const ImageIdx: Integer;
const Data: Pointer;
const aTree: TcxTreeList): TcxTreeListNode;
begin
if aTree =
NIL then Raise Exception.Create('
Internal Error');
if aParent =
NIL then
result := aTree.Add
else
Result := aParent.AddChild;
result.AssignValues(values);
result.ImageIndex := ImageIdx;
result.Data := data;
end;
procedure TForm2.TreeBuild;
var
i: integer;
w: TWus;
begin
with tl
do
begin
BeginUpdate;
Clear;
for I := 0
to WusList.Count - 1
do
begin
w := WusList.Items[i];
TreeAddNode(TreeFindParent(w.pid), [w.pid, w.id, w.s], -1, w, TL);
end;
EndUpdate;
end;
end;
function TForm2.TreeFindParent(
const aParentId: Integer): TcxTreeListNode;
begin
if aParentId < 0
then
Result :=
NIL
else
begin
result := tl.TopNode;
while result <>
NIL do
begin
if result.Data =
NIL then Raise Exception.Create('
Internal Error');
if TWus(result.Data).id = aParentId
then break;
result := result.GetNext;
end;
end;
end;
Und So, wollte ich eigentlich speichern:
Delphi-Quellcode:
procedure TForm2.TreeStore;
procedure Traverse(N: TcxTreeListNode; apid: integer);
var
i: integer;
begin
for i := 0 to n.Count - 1 do
begin
tWus(n.Data).pid := apid;
if n.HasChildren then
Traverse(n.Items[i], tWus(n.Data).id);
end;
end;
var
i: integer;
begin
for I := 0 to tl.Count - 1 do
traverse(tl.Items[i], -1);
end;
Ich kämpf jetzt hier schon seit Stunden und sehe langsam gar nichts mehr. Sieht jemand das Problem?
Ich hänge noch mein Testprojekt hinten dran.
Euer GreenHorn