Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
DBGrid que adapte sus columnas en función del ancho del contenedor

Hola, en lazarus configuro el dbgrid para se adapte a su contenedor, luego configuro las columnas(las cuales por su naturaleza no deben ser del mismo ancho), el problema ocurre cuando maximizo el form, el dbgrid se adapta pero las columnas no, si existiese la forma de configurar el height de las columnas mas que por un valor fijo, con una relación porcentual con el ancho de su contenedor ....
por supuesto estoy buscando preferiblemente propiedades cosa de evitar llenar de codigo de presentación a mi aplicación

espero se entienda mi problema ....gracias por su atención estoy seguro que esta justo alli en mis narices pero la verdad no lo veo ...
Saludos
Responder Con Cita
  #2  
Antiguo 13-04-2015
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Puedes utilizar un RxDBGrid. Tiene la propiedad AutoSizeColumns.
Yo particularmente utilizo el evento onResize. Doy a cada columna un porcentaje de ancho en la propiedad Tag y calculo el ancho correspondiente cuando se redimensiona.
__________________
http://www.gestionportable.com
Responder Con Cita
  #3  
Antiguo 14-04-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Podrias explicarte un poco mejor

Hola, la verdad no entiendo mucho tu respuesta, (ojo ignorancia mia) al evento onrisize que te refieres es el del form, y como utilizar la propiedad tag, esa nunca la he utilizado de hecho me entero de su existencia( la ignorancia no tiene limite) podrias darme algo de codigo a modo de ejemplo ...

Gracias ....
Responder Con Cita
  #4  
Antiguo 15-04-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
La propiedad Tag almacena un entero, y esta para meter "lo que nos de la gana", no afecta en absolutamente nada al comportamiento del componente

Como dice pacopenin, a cada columna le asignas un porcentaje y despues en base a eso calculas el ancho (cómo, no se )
Responder Con Cita
  #5  
Antiguo 15-04-2015
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Efectivamente. La propiedad Tag es tal cual la explica AgustinOrtu.

Te pongo un ejemplo de como lo hago.

Código Delphi [-]
procedure TFBscInventario.JvPanel1Resize(Sender: TObject);
var
 l : Integer;
begin
  inherited;
  l := smDBGridLin.Width - 175;
  smDBGridLin.Columns[0].Width := (l * smDBGridLin.Columns[0].Tag) div 100;
  smDBGridLin.Columns[1].Width := (l * smDBGridLin.Columns[1].Tag) div 100;
end;

o así.

Código Delphi [-]
procedure TFFacturaVenta.FormResize(Sender: TObject);
var
 i, l, tot : Integer;
begin
  inherited;
  l := smDBGridUI.Width - 27;
  tot := 0;
  for i := 0 to smDBGridUI.Columns.Count - 2 do
   begin
    smDBGridUI.Columns[i].Width := (l * smDBGridUI.Columns[i].Tag) div 100;
    Tot := Tot + smDBGridUI.Columns[i].Width;
   end;
  smDBGridUI.Columns[(smDBGridUI.Columns.Count - 1)].Width := l - Tot;
end;

Ésta última lo que hace es que ajusta la última columna al ancho restante.
__________________
http://www.gestionportable.com
Responder Con Cita
  #6  
Antiguo 15-04-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Nuevo detalle molesto

Hola gracias a sus respuestas logre hacer el siguiente procedimiento valido para los tipos dbgrid

Código Delphi [-]
Procedure adaptar_Grid(Grid:TDbGrid);
var
  ancho,i : integer;
begin
  ancho := Grid.Width;
  for i := 0 to Grid.Columns.Count -1 do
  begin
  Grid.Columns[i].Width := (ancho * Grid.Columns[i].tag) div 100 ;
  end;
end;

Sin embargo y dada la naturaleza de mis forms esta ocurriendo algo no muy deseable:
algunos de mis forms tienen dentro de si control pageControl dentro de los cuales en distintos tabs hay dbgrids, con el uso del procedure anterior en el evento onrezise del form los configuro a todos:

Código Delphi [-]
adaptar_grid(dbgrid1);
adaptar_grid(dbgrid2);
.
.
.
adaptar_grid(dbgrid..N);
Mas sin embargo el unico que realmente se adapta es aquel que se encuentre visible al momento de re dimensionar el form

esa es mi nueva duda
Gracias por todo
Responder Con Cita
Respuesta



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
Problemas con el ancho de columnas en un DBGrid JoAnCa Varios 5 03-03-2011 12:34:15
Colocar Ancho De columna de un DBGrid dependiendo del ancho del maximo campo guardado gulder Varios 3 08-11-2008 12:27:34
Ancho de columnas de un DBGrid PTW Varios 2 01-06-2005 01:50:39
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 11:15:06.


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