Wir machen das sehr einfach:
Wir nehmen eine TVirtualStringTree, die in OnGetText auf die Daten in einer Liste zugreift. Ein Timer (bzw. bei uns ein Thread, aber das ist ja egal) stößt dann das Aufräumen der Liste an, setzt ggf. die Anzahl der Elemente in der Liste neu bzw. ruft Invalidate auf. Daraufhin werden die dann aktuellen Elemente in der Liste gezeichnet.
Ich glaube ein VirtualStringTree wäre in der Angelegenheit etwas overkill. Ich gehe mal davon aus, dass der TE gerade erst mit dem Programmieren angefangen hat und der VST dann "etwas" zu kompliziert wäre.
Aber trotzdem sollte er die Daten in einer Klasse ablegen. Die Instanz der Klasse sollte, wie auch schon des öfteren erwähnt, in einer ObjectList abgespeichert werden. Danach ist es ein Leichtes, die Liste (von oben nach unten) zu durchlaufen und dann die Einträge, die älter sind als 5 Minuten, aus der Liste zu entfernen. Schlussendlich müssten dann nur noch die Elemente in der ListBox neu erstellt/gezeichnet werden.
@TE: Was hast du denn bereits von den Vorschlägen umgesetzt? Oder wo hängst du gerade