Das funktioniert, weil der Fokus tatsächlich erst nach dem Event gesetzt wird, ebenso wie die UI-Effekte usw.
Eine schöne Lösung ist das aber wohl nicht, denn wie die Folgefehler mit dem fehlenden Cursor zeigt ist das so nicht gedacht gewesen.
Leider kommt man da aber auch kaum heran. Die Prozedur SetFocusControl des Formulars (habs grad nicht mehr so genau im Kopf) ist z.B. natürlich wieder nicht virtuell. (Sonst wäre es ja zu einfach da etwas zu ändern...
) Diese Designprobleme ziehen sich leider auch durch Firemonkey durch (das Problem gibt es ja in der
VCL genauso). Immer nur das ist virtuell was gerade jemand an anderer Stelle gebraucht hat. An die Programmierer, die später damit arbeiten, wird offenbar weniger gedacht.
Eine Lösung:
SetFocusControl asynchron nach dem Ende der Prozedur aufrufen um den Fokus zurückzusetzen. In der
VCL hätte ich mir dazu selbst eine Windows Message geschickt. In Firemonkey fällt mir gerade keine schöne Lösung dafür ein.