Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Knoten makieren über Buttonclick event

  Alt 4. Jun 2007, 07:47
Hallo,

Zitat von epex:
... kann ich nicht einfach den Knoten wegspeichern im Array oder Record und dann später wieder aufrufen über die Select function? ...
das ist genau der erste Weg, den ich beschrieben habe. Wenn die Query, mit der du dir die Daten für das Befüllen der TreeView besorgt hast, offen bleibt, dann hast du die Daten ja immer verfügbar. Um den jeweiligen Knoten und seinen zugehörigen Record wechselseitig miteinander zu verknüpfen kannst du eine Zwischenstruktur in Form einer assoziativen Liste einführen. Dazu kannst du eine private Form-Variable NodeMap vom Typ TStringList verwenden. Beim Befüllen der TreeView trägst du dann jeden Knoten dort ein:

Delphi-Quellcode:
// ...
tn := TreeView.Nodes.AddChildObject(Query.FieldByName('NAME').AsString, Pointer(Query.RecNo));
NodeMap.AddObject(IntToStr(Query.RecNo), tn);
// ...
Später kannst du dann über den Knoten den Record der Query identifizieren oder über die Datensatznummer des Records den zugehörigen Knoten:

Delphi-Quellcode:
var
  tn: TTreeNode;
begin
  Query.RecNo := Integer(TreeView.Selected.Data);
  with NodeMap do
    TTreeNode(Objects[IndexOf(IntToStr(Query.RecNo))]).Selected := True;
end;
Der zweite von mir beschriebene Weg ist interessant, wenn die Daten über Strings identifiziert werden, wie zum Beispiel die Namen von Dateien über einen Pfad. So kann man auf die Assoziation von Knoten und Record verzichten und kann über einen Suchalgorithmus den Knoten bei Bedarf im Baum lokalisieren. Performanter ist der erste Weg.

Freundliche Grüße
  Mit Zitat antworten Zitat