De entrada tienes que usar divisiones enteras (div), luegos debes pensar que el TRect del grid contienes posiones respecto al origen del mismo
Código Delphi
[-]
var
Txt: String;
LonTexto: integer;
AnchoCelda : integer;
MargenTexto : integer;
begin
Txt := StringGrid1.Cells[ACol,Arow];
If ACol = 0 then
StringGrid1.Canvas.TextRect(Rect,Rect.Left+3,Rect.Top,Txt)
else
begin
LonTexto := Canvas.TextWidth(Txt);
AnchoCelda := Rect.Right - Rect.Left;
MargenTexto := (AnchoCelda-LonTexto) div 2;
StringGrid1.Canvas.TextRect(Rect, MargenTexto, Rect.Top, Txt);
end;
end;
nota: como no tengo el delphi a mano, no recuerdo si el valor que se pasa en segundo lugar es la posición de inicio dentro de la celda o el tamaño del texto a dibujar, pero por ahi van los tiros
Saludos, salvica