¿Cómo hacer que las columnas cambien el ancho cuando se agranda el formulario que contiene la DBGrid?
Creando el evento FormResize y asignarlo a los eventos del Form OnResize y OnChangeBounds. Desde ya el grid debe estar anclado al formulario y tener definido al menos las constraints de valores mínimos. Luego, un poco de matemáticas y eso es todo.
Así tengo definido el anclaje del DBGrid, mucho no entiendo de este tema, mucho prueba y error hasta dar con el resultado que busco.
Las Constraints del DBGrid, aunque esto es relativo si están definidas las del Form.
En los eventos del DBGrid, desde el inspector de objetos, creamos el evento para OnResize y también lo asignamos a OnChangeBounds.
procedure TfrmBancos.FormResize(Sender: TObject);
var
ndiv, nmod, ndist:Integer;
begin
ndist:=(Width-Constraints.MinWidth);
if ndist < 4 then exit;
ndiv:=ndist div 4;
nmod:=ndist mod 4;
DBGrid1.Columns.Items[1].Width:=160+ndiv;
DBGrid1.Columns.Items[2].Width:=120+ndiv;
DBGrid1.Columns.Items[3].Width:=150+ndiv;
DBGrid1.Columns.Items[4].Width:=160+ndiv;
if nmod>0 then
DBGrid1.Columns.Items[4].Width:=DBGrid1.Columns.Items[4].Width+nmod;
end;
En este caso, la columna 0 (cero) no la muestro, solo las 1,2,3 y 4 con un ancho definido en la propiedad width de cada columna de 160, 120, 150 y 160 respectivamente.
Lo que hago es calcular en cuántos píxeles se agranda el formulario y en base a ello, lo distribuyo en las columnas, como son 4, hago la división entera sobre 4 y el resto (mod) lógicamente también sobre 4. Luego elijo a que columna se asigno el sobrante si es que lo hay (mod 4).
No hay comentarios:
Publicar un comentario