Die schnellste Möglichkeit, den Baum dynamisch nachzuladen ist die, die Datei korrekt zu sortieren, sodaß Du relativ fix die nachzuladenden Knoten ermitteln kannst. Du kannst versuchen, die Bauminformation in einer einfach TStringlist zu laden. Das ist relativ fix.
Wenn Du nun einen Knoten expandieren willst, dann suchst Du das erste 'Kind' der neuen Unterebene. Ab da liest Du aus der Stringliste einfach alle Elemente dieser Ebene ein. Eine Stringliste mit 200.000 Elementen durchzulaufen geht innerhalb von ein paar ms, also kein Problem. Wichtig ist, das Du anhand eines Schlüssel erkennst, welche Knoten zusammengehören, und das sehe ich bei deinem Verfahren nicht. Für die Root-Ebene ist das einfach '00', aber für die Kinder des 3.Rootknotens ist das nicht gegeben. Deshalb wäre es ratsam, Jedem Knoten eine ID zu geben, und zwar so (rekursiv definiert):
Delphi-Quellcode:
Function ID (Knoten)
If Knoten = Nil Then
Result := ''
Else
Result := ID (Knoten.Parent)+'/'+Knoten.Index
Nach dieser ID sortierst Du die Stringliste.
Um nun alle Kinder eines Knotens mit einer bestimmten ID 1/2/3 zu laden, suchst Du einfach den Eintrag 1/2/3/0. Das ist das erste Kind. Ab da gehst Du sequentiell in der Stringliste weiter (die ist ja nach der ID sortiert), bis die einzulesende ID nicht mehr dem Muster 1/2/3/* entspricht.
Das sollte ohne Verzögerungen gehen. Ich teste das gleich mal und poste dann hier (wenn ich mich nicht zum Horst mache), eine Demo.