All zu viel ausrechnen muß man nicht, denn das übernimmt Delphi für einen.
Über den Parameter Rect bekommt man die Position der Zelle sehr praktisch geliefert.
Und nein, TextOut, TextRect und Co. ist der korrekte Weg ... Delphi mach intern auch nichts Anderes, als mit
TCanvas.TextRect den Text dort reinzuschreiben.
Falls das doppelte Zeichnen stört, dann kann man es mit
DoubleBuffered versuchen
oder man schaltet das Zeichnen vom Delphi ab (
TCustomGrid.TDefaultDrawing=False), aber dabei muß man dann natürlich alle Zellen selber zeichnen.
Und z.B. über
StringGrid1DrawCell TextOut lassen sich einige Beispiele finden.