Звиняюсь, код с одного места в другое вставил, а i, j на ACol, ARow поменять забыл 

. Вот правильный код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  x, y:Integer;
  sz:tagSize;
begin
 StringGrid1.Canvas.Font:=StringGrid1.Font;
 If ARow=0 then
 StringGrid1.Canvas.Font.Style:=[fsBold]
 else
 StringGrid1.Canvas.Font.Style:=[];
 sz:=StringGrid1.Canvas.TextExtent(StringGrid1.Cells[ACol, ARow]);
 StringGrid1.Canvas.Brush.Color:=clWhite;
 StringGrid1.Canvas.FillRect(StringGrid1.CellRect(ACol, ARow));
 x:=StringGrid1.CellRect(ACol, ARow).Left+
  (StringGrid1.CellRect(ACol, ARow).Right-StringGrid1.CellRect(ACol, ARow).Left-sz.cx) div 2;
 y:=StringGrid1.CellRect(ACol, ARow).Top+
  (StringGrid1.CellRect(ACol, ARow).Bottom-StringGrid1.CellRect(ACol, ARow).Top-sz.cy) div 2;
 StringGrid1.Canvas.TextOut(x, y, StringGrid1.Cells[ACol, ARow]);
end;
ты сам этот изумительный код запускал?
Запустил, работает, естественно для большой таблицы будет тормозить.