Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TcxTreeList - Travesieren und Parent setzen (https://www.delphipraxis.net/137186-tcxtreelist-travesieren-und-parent-setzen.html)

GreenHorn3600 15. Jul 2009 22:19


TcxTreeList - Travesieren und Parent setzen
 
Liste der Anhänge anzeigen (Anzahl: 2)
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 ... :roteyes:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz