Ver Mensaje Individual
  #4  
Antiguo 08-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Supongo que el problema viene por el tipo de letra no proporcionial del dbgrid. Como todos los carácteres no tienen el mismo ancho, no podemos hacer una aproximación, (usa la fuente courier).

Aquí tienes una rutina que funciona muy bien
Código Delphi [-]
{-----------------------------------------------------------------------------
  Procedure: AjustaDisplayWidth
  Author:    Lepe
  Date:      03-may-2005
  Arguments: D: TDataSet;
            const MaxAncho: Integer = 150; Maximo ancho para cada campo
            const ExtraChars:Integer = 0; para ver en un grid mejor.
  Result:    None
  Purpose:  Ajustar el tamaño de cada columna según el dato más largo.
-----------------------------------------------------------------------------}
procedure AjustaDisplayWidth(D: TDataSet;
                             const MaxAncho: Integer = 150;
                             const ExtraChars:Integer = 0);
var
  i, nIdx: Integer;
begin
  if D.Active then
    try
      D.DisableControls;
      D.First;
      nIdx := 0;
      while not D.Eof do
      begin
        for i := 0 to pred(D.FieldCount) do
        begin
          // en la 1ª vuelta reseteo el displayWidth existente
          if (nIdx = 0) then
            D.Fields[i].DisplayWidth := 1;
          D.Fields[i].DisplayWidth := EnsureRange(
            Max(D.Fields[i].DisplayWidth,
            Length(D.Fields[i].AsString) +
            IfThen(D.Fields[i].DataType = ftFloat, 3,
            ExtraChars) // añadimos espacios para ,00
            ),
            0, MaxAncho);
        end;
        D.Next;
        if nIdx = 0 then
          Inc(nIdx);
      end;
    finally
      D.First;
      D.EnableControls;
    end; // D.active
end;
No puedo decirte los "uses" porque está en una unidad grande, pero con F1 los averiguarás.

Para llamarlo:
Código Delphi [-]
ajustaDisplaywidth(query1);
Si lo ejecutas, el ancho se ajustará al último carácter, así queda la información muy "apretada", de ahí el parámetro "extrachars" que permite agregar 1 o dos espacios al final de cada columna para que el grid quede más limpio.

La rutina ifthen es la que viene en la unidad Maths.

Edito: Desde luego no es nada eficiente, pero cumple su cometido.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita