![]() |
VirtualTreeView: Sortierung
Hi,
ich habe in einem VirtualStringTree Ordner und Dateien aufgelistet. Welcher Weg ist der schnellste, um die Ordner und Dateien voneinander zu trennen ? Die Komponente kann eine ganze Menge und ich weiß nicht, welche Ereignisse man dafür nehmen könnte. |
Re: VirtualTreeView: Sortierung
kommt drauf an - könntest es einfach sortieren (dazu einfach das OnCompareNode Event verwenden)
|
Re: VirtualTreeView: Sortierung
Hallo Nils,
erst einmal musst Du das Ereignis OnCompareNodes benutzen, denn jedes mal wenn das VST sortiert werden soll, wird diese Routine aufgerufen. In OnCompareNodes vergleichst DU dann die Knoten (in Deinem Fall wohl Ordner oder Datei) und gibst das Resultat über die Prozedurvariable "RESULT" zurück. Anhand dessen setzt VT dann den Eintrag an die passende Stelle. D.h. Du bestimmst für JEDEN Eintrag (denn diese Routine wird für jeden Knoten aufgerufen) aufgrund welcher Kriterien der Knoten an welche Stelle rutscht. In der Hilfe ist auch ein Beispiel unter "OnCompareNodes" zu finden. |
Re: VirtualTreeView: Sortierung
schau dir einmal die demos an die mitgeliefert werden.
wenn nicht: die stehen auch extra zum download. da sind schöne beispiele enthalten. |
Re: VirtualTreeView: Sortierung
Ich habe es mal probiert, aber es wird nichts sortiert. Warum ?
Delphi-Quellcode:
In den Demos habe ich bis jetzt noch nichts gefunden, was sich damit auseinandersetzt.
procedure TfrmMain.VSTCompareNodes(Sender: TBaseVirtualTree; Node1,
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); var Data1, Data2 : PTreeData; b1, b2 : Boolean; begin Data1 := Sender.GetNodeData(Node1); Data2 := Sender.GetNodeData(Node2); if Data1.fTyp = (ftDir) then b1 := True else b1 := False; if Data2.fTyp = (ftDir) then b2 := True else b2 := False; if b1 <> b2 then begin if b1 then Result := -1 else Result := 1; end else Result := CompareText(Data1.fPfad, Data2.fPfad); // fPfad ist wenn nichts schief läuft, der komplette Pfad+Dateiname+Dateiendung end; |
Re: VirtualTreeView: Sortierung
Ruf mal
Delphi-Quellcode:
auf.
VST.Sort;
|
Re: VirtualTreeView: Sortierung
Hallo Nils,
du mußt entweder das Flag toAutoSort in der Eigenschaft TreeOptions.AutoOptions des Baums setzen oder - wie DeddyH geschrieben hat - das Sortieren manuell durch einen Aufruf der Methode Sort bzw. SortTree auslösen. Auf die booleschen Variablen kannst du übrigens verzichten:
Delphi-Quellcode:
Gruß Hawkeye
procedure TfrmMain.VSTCompareNodes(Sender: TBaseVirtualTree; Node1,
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); var Data1 : PNodeData; Data2 : PNodeData; begin Data1 := Sender.GetNodeData(Node1); Data2 := Sender.GetNodeData(Node2); if (Data1.fTyp = Data2.fTyp) then Result := CompareText(Data1.fPfad, Data2.fPfad) else Result := Ord(Data2.fTyp = ftDir) - Ord(Data1.fTyp = ftDir); end; |
Re: VirtualTreeView: Sortierung
Es funktioniert, danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz