Esta es otra versión de la función proporcionada por ecfisa:
Código Delphi
[-]
procedure AdjustColumnsWidth(ADBGrid: TDBGrid);
const
hoz_margin = 3; var
ValueWidth: Integer;
TextWidth: Integer;
I: Integer;
begin
with ADBGrid do
for I := 0 to (Columns.Count - 1) do
begin
TextWidth := Canvas.TextWidth('WqOyA');
ValueWidth := Round((Columns[i].Field.MaxLength / 5) * TextWidth);
Columns[i].Width := ValueWidth + (hoz_margin * 2);
end;
end;
Esta versión es muchísimo más rápida. Sin embargo, la versión de ecfisa es más precisa. Lo que hace mi código es tomar el ancho en píxeles de una muestra de 5 caracteres y luego multiplicar el resultado por el MaxLengh del campo (no del valor en sí almacenado). Este código da por sentado que todas las columnas serán de tipo
String. Habrá que modificar el código para ajustarlo a otros tipos de datos.
Por último, lo que te dije anteriormente sobre los tipos de fuentes es muy valido en un código cómo el que te acabo de proporcionar. El código expuesto supone que la fuente a utilizar no es monospace, por lo que toma una muestra que incluyen los caracteres más anchos y altos que puede tener una fuente. Si la fuente sería monospace, sería suficiente con que la muestra solo sea cualquier caracter.
Saludos,
Chris