Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 08-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer para que el ancho de una columna de un TListView permanezca inalterable abracadabra OOP 17 01-10-2005 00:33:35
Ancho de columnas de un DBGrid PTW Varios 2 01-06-2005 01:50:39
Ancho de una columna en excel jgutti Servers 2 25-05-2005 21:10:55
Contorlar el ancho de las columnas de un DbGrid __cadetill OOP 7 05-07-2004 13:18:21


La franja horaria es GMT +2. Ahora son las 04:10:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi