Como han dicho otros, la mejor forma es usar OnEnter y OnExit. Yo haría una llamada genérica a otra función para cambiar el color, mandando como parámetro el control que va a cambiar el color, y el modo (con o sin foco). Así puedes tener todo el control de cambio de color en un solo sitio, para futuros cambios.
Pero no es la única forma. Puedes extender la clase en cuestión para que tenga diferentes colores dependiendo de si tiene el foco o no, y manejar mensajes de Windows para que cambien el estado del control. Aunque esto es más complicado, claro.
Una última manera, poco elegante pero quizá práctica depende de la situación, es mirar cada vez que se pulse una tecla o botón de ratón (OnKeyDown, OnClick, etc. de TForm) que mire si TForm.ActiveControl es del tipo que tú quieres, y si es así, pues a cambiar colores. Creía que los forms tenían un evento estilo OnChangeFocus u OnActiveControlChange, pero no lo encuentro ni en TForm ni en TCustomForm. ActiveControl es una propiedad de tipo TWinControl, que tiene propiedades como Name, Tag que te pueden servir para diferenciar entre los que quieres cambiar y los que quieres ignorar.
Espero que esto te sirva para dar el siguiente paso.