AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TcxTreeList - Travesieren und Parent setzen

Ein Thema von GreenHorn3600 · begonnen am 15. Jul 2009
Antwort Antwort
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#1

TcxTreeList - Travesieren und Parent setzen

  Alt 15. Jul 2009, 22:19
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
Angehängte Dateien
Dateityp: dfm unit2_101.dfm (2,5 KB, 3x aufgerufen)
Dateityp: pas unit2_171.pas (4,7 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 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