Prueba con este código, seguro que lo puedes modificar para que se adapte a lo que necesitas. No recuerdo de donde lo fusilé, pero fue por estos foros seguro
Un saludo
Código Delphi
[-]function TFrmQuick.CalcularAnchoColumnas( Campo: TField): integer;
var w:integer; TM:TTextMetric;
begin
try
Canvas.Font := QRLabel1.Font;
GetTextMetrics(Canvas.Handle, TM);
Result := Campo.DisplayWidth * Canvas.TextWidth('0') + 3;
W := Canvas.TextWidth(Campo.DisplayLabel) + 3;
if Result < W then Result := W;
if (Campo.Datatype = ftFloat)then
begin
w:= Canvas.TextWidth((Campo as tFloatField).Displayformat) + 4;
if Result < W then Result := W;
end;
finally
end;
end;