Thema: Delphi VirtualTreeView filtern

Einzelnen Beitrag anzeigen

Roaster

Registriert seit: 21. Jul 2004
Ort: bei mir zu Hause
107 Beiträge
 
#1

VirtualTreeView filtern

  Alt 24. Aug 2009, 15:45
Hi,

ich benutze diesen Code, den ich als Vorlage hier in der DP gefunden habe, um die Knoten eines VirtualTreeViews zu filtern:


Delphi-Quellcode:
procedure TfrmSelNode.FilterNodes(const Text : string; SearchType : TSearchType);
var
  Node : PVirtualNode;
  Data : PPWCTreeNode;
begin
  Screen.Cursor := crHourGlass;
  treeAccounts.BeginUpdate;
  Node := treeAccounts.GetFirst;
  while Node <> nil do
  begin
    Data := treeAccounts.GetNodeData(Node);
    if not MatchStr(Data^.Caption, Text, False) then
      Node.States := Node.States - [vsVisible]
    else
      Node.States := Node.States + [vsVisible];
    Node := treeAccounts.GetNext(Node);
  end;
end;
Dies klappt soweit nur suche ich nach einer Lösung bei der die Eltern-Knoten nicht ausgeblendet werden, sobald eines der darunterliegenden Kinder dem Filter-/Suchtext entspricht.

Mit dem oben gezeigten Code passiert nämlich genau dieses. Erstmal denke ich berücksichtigt der Code schon mal gar nicht eine hierarchische Anordnung, da immer nur mit GetNext durch den Baum gelesen wird und ich denke dass dies mit ein Problem ist, wenn ich das oben genannte erreichen will.

Ich suche somit nach einem Coding, das den Baum vom Root bis zum letzten Knoten durchsuchen kann, nicht gewünschte ausblendet und dabei aber die Hierarchie beachtet.
Hintergrund ist der, dass ich in diesem Baum sowas wie Ordner und Dateien anzeige, die je nach eingegebenem Filter ein oder ausgeblendet werden sollen. Trifft das Filterkriterium dabei auf eine Datei, so sollten die darüberliegenden Ordner nicht verschwinden.

Hat jemand schon mal was ähnliches versucht?
cu, Michael

Windows 7, WinXP Pro, Vista, WinXP Home, Win98 SE
D4 C/S, D7 Enterprise, Turbo Delphi Pro, Delphi 2009
  Mit Zitat antworten Zitat