Danke für die Aufmunterung.
Aber dann hätte ich noch einen besseren Vorschlag. Setze nicht einfach "HasChildren" auf
true, sondern prüfe ob das überhaupt notwendig ist. Folgende Änderung im Code von "Scan" macht das:
Delphi-Quellcode:
// wenn das aktuelle Element ein Ordner ist,
// dann diese Prozedur erneut aufrufen und
// den Ordner scannen lassen
uAttr := SFGAO_CONTENTSMASK;
iFolder.GetAttributesOf(1,pidlItem,uAttr);
tn.HasChildren := (SFGAO_HASSUBFOLDER and uAttr <> 0);
Jetzt müsste man
IMHO nur entweder den kompletten Pfad oder die PItemIdList des aktuellen Ordners im TTreeNode speichern (Stichwort: Data = pointer), dann kann man beim Anklicken eines Knotens die entsprechenden Unterordner laden. Denke ich ...
PS: Ich hänge einfach mal die
nonVCL-Version ran, an der ich heute nebenbei gesessen habe. Es ist eine recht einfache Variante, die die jeweiligen IDs in einer Klasse speichert und jedem Knoten zuordnet. Daher geht das Scannen der Partition jetzt tatsächlich recht fix, und die Unterordner werden eigentlich erst beim Aufklappen "geladen".