Una forma simple de hacerlo es la siguiente:
Asumo 6 pixels por letra (O calcular con TextWidth('w') el largo de la letra w en la fuente actual).
Multiplico la cantidad de letras por 6
Si no quiero que las columnas queden muy anchas, puedo limitar el ancho máximo (300 pixels en mi ejemplo).
Código Delphi
[-]procedure TFrmPrincipal.ComboBox1Change(Sender: TObject);
Var
I : Integer;
begin
FrmData.ADOQuery1.Close;
FrmData.ADOQuery1.SQL.Text := 'Select * From ['+ComboBox1.Text+']';
FrmData.ADOQuery1.Open;
ComboBox2.Items.Clear;
ComboBox3.Items.Clear;
for I:=0 to FrmData.ADOQuery1.FieldCount-1 do
Begin
ComboBox2.Items.Add(FrmData.ADOQuery1.Fields[i].FieldName);
ComboBox3.Items.Add(FrmData.ADOQuery1.Fields[i].FieldName);
ComboBox3.ItemIndex := 0;
End;
for I:=0 to DBGrid1.Columns.Count-1 do
begin
DBGrid1.Columns[i].Width := DBGrid1.Columns[i].Field.DisplayWidth * 6;
if (DBGrid1.Columns[i].Width > 300) then
DBGrid1.Columns[i].Width := 300;
end;
end;