Tyrael, deine Schleife ist eine Endlosschleife.
Den VST kannst du auf zwei Arten durchsuchen. Entweder du holst dir mit .GetFirst den ersten Knoten und gehst in einer while Assigned(Node)-Schleife den Baum durch, holst dir für jeden Knoten die Daten, vergleichst den Text. Wenn er stimmt, setzt du VST.Focused[Node] := TRUE (nicht mit VST.FocusedNode!) und verlässt die Schleife. Sonst holst du dir mit .GetNext den nächsten Knoten.
Die zweite ist per VST.IterateSubTree. Die ist ziemlich schnell. Dafür mußt du nur eine Callback-Funktion implementieren, die du als 2. Parameter übergibst. Der erste und letzte Param kann "nil" sein. Brauchst du in deinem Fall nicht.
Der Kopf dafür sieht so aus:
procedure ItTree_CallBack (Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
Dort kannst du genauso per Node die Daten holen, vergleichen und wenn der Text stimmt, Focus auf den Knoten setzen und Abort := TRUE.