Du musst den Text selbst nochmals neu zeichnen nachdem dein FillRect()/Rect() unterwegs war, da das das natürlich übermalt hat. Die On*Draw*-Events treten i.A. nach* Zeichnen durch den Default-Handler (bzw. "Drawer") auf - d.h. du bist der letzte der malt bevor es auf den Bildschirm geht.
*) Manche Grids unterlassen den Standard-Handler ganz, ob das TStringGrid das auch tut weiss ich grad nicht.
Das habe ich auch verstanden das es übermalt wird^^, mich interessiert viel eher WIE ich das neu zeichne, da ich sowas noch nie gemacht habe.