Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DBGrid: Como redimensionar columnas si se redimensiona el dbGrid? (https://www.clubdelphi.com/foros/showthread.php?t=63718)

quali 27-02-2009 15:46:41

DBGrid: Como redimensionar columnas si se redimensiona el dbGrid?
 
Hola Gente !!

Tengo una grilla dentro de un panel. La propiedad Align de la grilla está puesta en 'alClient'. O sea, si se redimensiona el panel, la grilla se redimensiona. Hay alguna manera de que las columnas de la grilla ajusten su tamaño en forma proporcional al nuevo tamaño de la grilla?
Desde ya agradezco cualquier respuesta
Saludos

Alejandro

marcoszorrilla 27-02-2009 16:17:43

He improvisado esta idea:

Código Delphi [-]
procedure TForm1.FormResize(Sender: TObject);
var
nAnchoCols:Integer;
nAnchoGrid:Integer;
nCols:integer;
nSobra:Integer;
nAumento:Integer;
i:Integer;
begin
DbGrid1.Width:=Form1.Width - 100;
nAnchoGrid:=DbGrid1.Width;
nAnchoCols:=0;
  For i:=0 to Dbgrid1.FieldCount -1 do
  begin
  nAnchoCols:=nAnchocols + DbGrid1.Columns[i].Width;
  end;

nCols:=DbGrid1.FieldCount;
nSobra:=nAnchoGrid - nAnchoCols;
nAumento:=nSobra Div nCols - 7;

  For i:=0 to Dbgrid1.FieldCount -1 do
  begin
  DbGrid1.Columns[i].Width:=DbGrid1.Columns[i].Width + nAumento;
  end;

end;

Un Saludo.

marcoszorrilla 27-02-2009 16:26:08

Me he dado cuenta que el ejemplo es para el cambio de tamaño del formulario y no de un panel como pedías, dejo el ejemplo anterior y añado otro con una pequeña modificación que creo que puede servir para lo que preguntas.
Código Delphi [-]
procedure TForm1.Panel1Resize(Sender: TObject);
var
nAnchoCols:Integer;
nAnchoGrid:Integer;
nCols:integer;
nSobra:Integer;
nAumento:Integer;
i:Integer;
begin
DbGrid1.Width:=Panel1.Width - 100;
nAnchoGrid:=DbGrid1.Width;
nAnchoCols:=0;
  For i:=0 to Dbgrid1.FieldCount -1 do
  begin
  nAnchoCols:=nAnchocols + DbGrid1.Columns[i].Width;
  end;

nCols:=DbGrid1.FieldCount;
nSobra:=nAnchoGrid - nAnchoCols;
nAumento:=nSobra Div nCols - 7;

  For i:=0 to Dbgrid1.FieldCount -1 do
  begin
  DbGrid1.Columns[i].Width:=DbGrid1.Columns[i].Width + nAumento;
  end;
end;
Un Saludo.

quali 27-02-2009 16:38:53

Marcos, muchas gracias !!!

Si bien tu solución hace crecer a todas las columnas por igual, sin mantener la proporción, creo que con unas pequeñas modificaciones puedo hacer que crezcan en forma porcentual con respecto al tamaño original.
En cuanto lo haga lo posteo.

Me sirvió muchísimo !! Gracias nuevamente

Alejandro

marcoszorrilla 27-02-2009 16:43:26

Como bien dices se puede modificar para que en vez de añadir la misma proporción a todas las columnas que es lo que yo he hecho lo haga de forma proporcional a su tamaño actual.

Un Saludo.

quali 27-02-2009 17:32:52

Acá está el código modificado.No funciona bien, supongo que es por el redondeo. El resize se ejecuta muchas veces mientras se cambia el tamaño de la ventana. Parece ser que en cada ejecución el porcentaje que cambia es mínimo. Y el redondeo termina afectando mucho.

Veré como hago para compensar eso.



Código Delphi [-]

private
    { Private declarations }
    anchoGrid: integer;

procedure TForm2.FormResize(Sender: TObject);
var
nuevoAnchoGrid:integer;
nCols:integer;
nPorcentaje : Double;
i:Integer;
begin

nuevoAnchoGrid:=DbGrid1.Width;

nCols:=DbGrid1.FieldCount;

nPorcentaje:= nuevoAnchoGrid / anchoGrid;
anchoGrid:= nuevoAnchoGrid;

  For i:=0 to ncols -1 do
  begin
  DbGrid1.Columns[i].Width:=round(DbGrid1.Columns[i].Width * nPorcentaje);
  end;
end;

Por lo menos la idea está.

Si logro que funcione bien, posteo lo que modifiqué.

Gracias nuevamente

Alejandro

TrUnkS 08-02-2010 23:00:49

Para aplicaciones MDI, si se desea aumentar el tamaño de la columna 3 del DBGrid:

Código Delphi [-]
procedure TFLCLIENTE.Panel1Resize(Sender: TObject);
begin
 DBGrid1.Columns[3].Width := 295 + (Panel1.Width - 902);
end;

Donde:

- 295 es el tamaño de la columna en tiempo de diseño. (Propiedad width)
- 902 es el tamaño del panel en tiempo de diseño. (Propiedad width)


La franja horaria es GMT +2. Ahora son las 10:01:00.

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