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
  #7  
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
Y cual es el problema si los que no se redimensionan no se ven??
Responder Con Cita
  #8  
Antiguo 15-04-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Se veran al momento de hacer clic en el tab correspondiente

Hola, gracias por tu respuesta, el problema es que la navegación entre los tabs del form es cosa frecuente de forma que si solo se redimenciona uno se ven muy mal el resto ...
No se si me explico, vuelvo a describir mi form

un form muestra la información de una entidad en particular, esta información esta distribuida en componentes db en un panel con alineación top, el resto del form esta ocupado por un control pageControl dentro del cual hay varios tabs(uno por cada tabla relacionada) donde muestro la información pertinente de cada tabla relacionada(relaciones uno a muchos) pues claro la idea es que los grids de estos tabs mantengan cierta coherencia entre si en cuanto al diseño y como luego de consultar un registro todas la entidades se actualizan, el usuario revisara(o no ) cada una de esas pestañas en busca de la información que para el momento considere pertinente, por tal razon si que es un problema,
gracias una vez mas por tu comentario ....
Responder Con Cita
  #9  
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
Supongo que será porque no usas columnas persistentes en el grid. Probablemente tenga que llamar a adaptar_grid después de abrir las tablas/qwerys correspondientes....o al cambiar de tab.
__________________
http://www.gestionportable.com
Responder Con Cita
  #10  
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
En donde llamas al proceso que adapta los grid? Proba hacerlo en algun evento del PageControl, por ejemplo en el OnPaint
Responder Con Cita
  #11  
Antiguo 15-04-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
si uso columnas persistentes

si que uso columnas persistentes en mis grids de hecho el grid tiene una propiedad autofill que adapta perfectamente las columnas, solo que las distribuye uniformemente lo cual no es deseable porque el ancho de los contenidos es variable ....
Responder Con Cita
  #12  
Antiguo 15-04-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
por cierto donde consigo los Rx

busco y busco y no encuentro un repositorio de los rx confiable, algunos que descargo no instalar por errores (no de dependencias) que otros componentes grid me sugieren, por alli encontre unos llamados virtualtree que según se puede lograr algo mas no tienen componentes db....
Gracias
Responder Con Cita
  #13  
Antiguo 15-04-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Solucionado

solo era cuestion de colocar el adaptar_grid en cada onresize correspondiente a cada tab, antes lo hacia todos los adaptar grid en el rezise del pageControl(lo hacia así por aquello de centralizar el código) muchas gracias por lo pronto estoy conforme mas sin embargo tengo otras dudas sobre lazarus que posteare en la brevedad ...
Gracias mil
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:54: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