Eigentlich ist die Lösung mit Delay() nicht besonders sauber.
Was passiert z.B. wenn während Delay()noch läuft das Formular geschlossen wird und sich dieses selbst freigibt?
=> Crash
Oder was passiert, wenn man während Delay() läuft einen Button klickt, der wiederum eine Methode aufruft,
die ebenfalls Delay() aufruft?
Es können sehr üble Dinge passieren, wenn man Application.ProccessMessages zu oft oder unkontrolliert aufruft.
Mit einem Timer kann man einen eventbasierten Ablauf ausführen.
Dazu ruft man eine Methode auf und übergibt die Verzögerungszeit und die Methode, die aufgerufen werden soll.
procedure CallDelayedMethod(delay:cardinal; method:TThreadMethod);
Der Timer wird gestartet und die übergebene Methode nach Ablauf der Zeit aufgerufen.
Im Anhang gibt es dazu ein Demo das die Fensterfarbe angelehnt an eine Ampel verändert.