Ver Mensaje Individual
  #6  
Antiguo 18-07-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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;

 // Ajusto ancho de columnas
 for I:=0 to DBGrid1.Columns.Count-1 do
 begin
    // Asigno 6px por letra
    DBGrid1.Columns[i].Width := DBGrid1.Columns[i].Field.DisplayWidth * 6;

    // Evito que la columna se pase de 300px
    if (DBGrid1.Columns[i].Width > 300) then
       DBGrid1.Columns[i].Width := 300;
 end;
end;
Responder Con Cita