Also,
ich hab mal hier was reingekrümelt, was theoretisch laufen könnte. Da ich aber nicht weis, wie die Suchdaten vorliegen, gehe ich von einem Array aus, welches diverse Texte enthält. Zurückgegeben wird eine ID, mit der man den Knoten direkt aus dem TreeView ziehen kann.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure SearchTree( Tree: TTreeView; var NodeHandle: HTreeItem; var SearchWords: Array of String ); var currentNode: TTreeNode; begin if Length( SearchWords ) <= 1 then begin currentNode := Tree.GetNode( NodeHandle ); while currentNode <> nil do begin if currentNode.Text = SearchWords[0] then begin SearchWords := Copy( SearchWords, 1, Length( SearchWords ) ); if currentNode.HasChilds then begin NodeHandle := currentNode.GetFirstChild.ItemID; SearchTree( Tree, NodeHandle, SearchWords ); end; end; currentNode.GetNext(); end; end; end; |
Falls du bisher noch nicht mit rekursiven Aufrufen zu tun hattest, dann könnte dies etwas schwer vom Verständnis sein. Das Wichtigste ist, daß diese Selbstaufrufe irgendwann enden, damit die Methode wieder nach 'oben' kommt.
Die Methode gibt dir aufgrund einer TextListe eine ID des Knoten, der den Text des letzten Elements (des Arrays oder der zuletzt Gefundene) darstellt. Damit wäre die Methode nicht unbedingt das Beste, weil sie stets ein Ergebnis zurückliefert: Die letzte Übereinstimmung eines Textes aus der Liste mit einem Wert aus dem Baum, auch wenn entweder die Liste oder der Baum oder beide noch weitergehen.
Der Aufruf wäre dann sowas wie:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var searchList: Array of String; searchedTreeNode: TTreeNode; searchedTreeNodeID: HTreeItem; begin searchList := VarArrayOf( 'Land1', 'Stadt3', 'Strasse2', 'Name1', 'Schluessel1' ); searchedTreeNodeID := myTree.Items.GetFirstNode.ItemID; SearchTree( myTree, searchedTreeNodeID, searchList ); searchedTreeNode := myTree.Items.GetNode( searchedTreeNodeID ); end; |
Hoffe, du kannst damit was anfangen. Ansonsten: Fragen fragen.
gegrüßt!