2009-05-25 3 views
0

Dies ist wahrscheinlich eine sehr "dumme" Frage für jeden, der VirtualShellTools kennt, aber ich benutze es erst und konnte meine Antwort nicht im Demos Code finden. Bitte beachten Sie, dass mir auch Virtualtreeview nicht vertraut ist.Wie sortiere ich Daten in einem VirtualExplorerTreeview (VirtualShellTools)

Ich benutze ein VirtualExplorerTreeview eine Verzeichnisstruktur angezeigt werden, mit einem VirtualExplorerListview verknüpfen eine bestimmte Art von Dateien im ausgewählten Verzeichnis sowie spezifische Informationen über sie angezeigt werden

Ich habe in der Lage gewesen, sie auf dem Punkt an der richtigen Stelle, verlinke sie, wie ich wollte, filtere alles in der Listenansicht und schaue mir die Demos an Ich habe eine ziemlich gute Idee, wie ich meine eigenen Spalten hinzufügen und sie zeichnen kann, um meine benutzerdefinierten Daten anzuzeigen.

Mein Problem liegt in der Treeview: Ich möchte die Verzeichnisse in der Reihenfolge sortiert, die ich will; Insbesondere möchte ich "Meine Dokumente" und andere Ordner zuerst angezeigt werden, dann Laufwerke, dann Wechselmedien. In der Eigenschaft TNamespace habe ich herausgefunden, wie man sie unterscheiden kann (Directory und Removable-Eigenschaften), aber ich weiß nicht, wie ich meine eigene Sortierung/welches Event ich benötige. Ich habe CompareNode ausprobiert, aber das scheint nicht einmal aufgerufen zu sein.

+0

Dieser zweite Teil ist völlig unabhängig von der Sortierung. Sie sollten das am besten auf eine separate Frage zum Hinzufügen von virtuellen Namespaces verschieben. –

+0

Ja ich denke du hast recht, ich habe es entfernt – Lepidosteus

Antwort

3

Wenn Sie alles selbst machen wollen, dann setzen Sie toUserSort in der Eigenschaft TVirtualExplorerTree.TreeOptions.VETMiscOptions. Dies führt dazu, dass das Steuerelement nur die DoCompare-Methode verwendet, die von der virtuellen Strukturansicht geerbt wurde und die den Ereignishandler OnCompareNodes aufrufen sollte.

Eine bessere Möglichkeit ist es, eine benutzerdefinierte TShellSortHelper bereitzustellen. Erstellen Sie einen Nachkommen dieser Klasse und überschreiben Sie die Methoden, die Sie benötigen. Erstellen Sie eine Instanz dieser Klasse und weisen Sie sie der Eigenschaft SortHelper des Baums zu. (Der Baum übernimmt das Eigentum des Helfers; das alte, aber nicht das neue). Wenn die Elemente nach einer Spalte sortiert werden, die diese Klasse nicht zu vergleichen weiß, dann behandeln Sie das Ereignis OnCustomColumnCompare des Baums.

Um Ihnen zu helfen, herauszufinden, welche Methoden Sie überschreiben müssen oder welche Ereignisse Sie behandeln müssen, setzen Sie einen Haltepunkt in TCustomVirtualExplorerTree.DoCompare und durchlaufen Sie, um zu sehen, was in verschiedenen Situationen aufgerufen wird.