Ja, TimerRoutine setzen, dort kommt der Code rein, der nach dem Abarbeiten von OnIdle gemacht werden soll. Im OnKeyDown setzt du dann am Ende Timer1.Enabled := True, und dann springt das Programm zurück in die OnIdle. Am Ende der OnIdle wird dann der Rest von OnKeyDown wegen des Timers ausgeführt. Allerdings musst du am Anfang der OnTimer-Routine Enabled wieder auf False setzen.
Falls du in der OnIdle allerdings ProcessMessages verwendest, so musst du den Umweg so machen:
Delphi-Quellcode:
//in OnKeyDown:
Timer1.Tag := 1;
//...
//in OnIdle:
//...
Timer1.Enabled := Timer1.Tag = 1;
Timer1.Tag := 0;
Ich hoffe das Prinzip ist einigermaßen verständlich