Delphi - OnExit-nél fellépő fókuszálási hiba javítása

forráskód letöltése
Legyen a következő feladatunk: van a Form-on egy TEdit, melyen keresztül adatot kérünk be. Amikor ennek létrejön OnExit eseménye, vagyis a felhasználó tovább lép egy másik beviteli eszközre, akkor szeretnénk ellenőrizni a bevitt adatot. Ha a beírt adat nem megfelelő számunkra, akkor egy MessageBox függvénnyel üzenetet küldünk a felhasználó felé. Bezárva ezt az ablakot viszont „eltűnik” a szövegkurzor, melynek a következő beviteli ablakon lenne a helye.
Attól, hogy a szövegkurzor nem látható, az adatbevitel még véghezvihető, csak hát nem a legszebb megoldás. A mellékelt példában az Edit1-nél TAB billentyűt nyomva az Edit2-re kerül a fókusz, de a kurzor nem látható. Az Edit3-ról az Edit4-re lépve TAB-al viszont már igen, mivel itt végeztünk hibajavítást, míg az első esetben nem.
Az Edit1 OnExit eseményénél tehát csak a felhasználói üzenet kerül megjelenítésre.
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Application.MessageBox('a', 'b', MB_OK);
end;
Az Edit3 OnExit eseményénél az üzenet megjelenítése után már javítjuk a fellépő hibát oly módon, hogy küldünk az aktuálisan aktív kontrolnak egy WM_SETFOCUS üzenetet és így már a szöveg kurzor is láthatóvá válik a MessageBox által megjelenített ablak bezárása után.
procedure TForm1.Edit3Exit(Sender: TObject);
begin
  Application.MessageBox('a', 'b', MB_OK);
  PostMessage(ActiveControl.Handle, WM_SETFOCUS, 0, 0);
end;