Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-02-2009
quali quali is offline
Miembro
 
Registrado: jul 2003
Ubicación: Posadas, Misiones, Argentina
Posts: 23
Poder: 0
quali Va por buen camino
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
__________________
Alejandro

Última edición por quali fecha: 27-02-2009 a las 16:05:07.
Responder Con Cita
  #2  
Antiguo 27-02-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 27-02-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 27-02-2009
quali quali is offline
Miembro
 
Registrado: jul 2003
Ubicación: Posadas, Misiones, Argentina
Posts: 23
Poder: 0
quali Va por buen camino
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
__________________
Alejandro
Responder Con Cita
  #5  
Antiguo 27-02-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 27-02-2009
quali quali is offline
Miembro
 
Registrado: jul 2003
Ubicación: Posadas, Misiones, Argentina
Posts: 23
Poder: 0
quali Va por buen camino
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
__________________
Alejandro
Responder Con Cita
  #7  
Antiguo 08-02-2010
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
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)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
columnas de un Dbgrid ramdo OOP 1 26-04-2005 02:12:11
Columnas del DBGrid hgiacobone OOP 5 25-11-2004 00:44:40
Columnas Dbgrid Carlex Conexión con bases de datos 2 13-02-2004 22:50:43
Columnas del DBGrid thecarlos MS SQL Server 1 24-12-2003 11:50:32
Fijar columnas en un DBGRID negama Conexión con bases de datos 0 29-09-2003 21:02:25


La franja horaria es GMT +2. Ahora son las 13:47:59.


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
Copyright 1996-2007 Club Delphi