Excel とかだと普通に行われている、これをやりたいと思ったことはありませんか?
私は非常にやりたいと思っていました(私だけかな(^^;)
文字列を数値に変換できるかどうかの関数を利用すると、意外に難しくはありませんでした。
TStringGrid を継承して、DrawCell を以下のように override すれば良いでしょう。
procedure TStringGridEx.DrawCell(ACol, ARow: Integer; ARect: TRect;
AState: TGridDrawState);
var
NotUsed: Extended;
CurrentDefaultDrawing: Boolean;
begin
if DefaultDrawing then
begin
if not TextToFloat(PChar(Cells[ACol, ARow]), NotUsed, fvExtended) then
Canvas.TextRect(ARect, ARect.Left + 2, ARect.Top + 2, Cells[ACol, ARow])
else
begin
InflateRect(ARect, -2, -2);
DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), -1,
ARect, DT_VCENTER or DT_RIGHT or DT_SINGLELINE);
InflateRect(ARect, 2, 2);
end
end;
CurrentDefaultDrawing := DefaultDrawing;
DefaultDrawing := False;
inherited DrawCell(ACol, ARow, ARect, AState);
DefaultDrawing := CurrentDefaultDrawing;
end;