Pytałem o jakieś proste rozwiązania i nic (sprawdzić w StringGridzie czy kursor znajduje się na początku, czy na końcu stringu). Mam już chyba sklerozę, bo nic innego nie przychodzi mi do głowy:

procedure GdzieJestKursor(Tab:TStringGrid;var PosL,PosR:Boolean);
          //PozL,PozR - przed lub za tekstem
          // długosc tekstu musi byc mniejsza od szer. kolumny
var
  Pos:TPoint;
  s:Integer;
  tekst1,tekst2:string;
begin
   PosL:=False;PosR:=False;
   if Tab.Cells[Tab.Col,Tab.Row]='' then
   begin
      PosL:=True;PosR:=True;
   end
   else
   begin
      GetCaretPos(Pos);
      if Pos.X<= Tab.Canvas.TextWidth(Tab.Cells[Tab.Col,Tab.Row][1]) then
      PosL:=True
      else
      if (Tab.Canvas.TextWidth(Tab.Cells[Tab.Col,Tab.Row])<Tab.ColWidths[Tab.Col])
         and(Pos.X>=Tab.Canvas.TextWidth(Tab.Cells[Tab.Col,Tab.Row])) then
      PosR:=True;
   end;
end;

//jozkan, zrozum, ze stawiajac znaczniki < delphi > </ delphi> na poczatku tekstu, nie otrzymasz jednak formatowania kodu..poprawilem..-lofix