Ir al contenido


Foto

Altura columnas Dbgrid


  • Por favor identifícate para responder
9 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 julio 2009 - 12:26

Hola a todos

Lo que quiero es fijar la altura de las columnas del dbgrid y el problema esta en que cuando se cambia el ancho de la columna, me cambia la altura. Se que debo utilizar [glow=red,2,300]ColWidthsChanged[/glow] pero no se donde.

Lo que hecho hasta  ahora es esto:



delphi
  1.   private
  2.     { Private declarations }
  3.  
  4.   public
  5.     { Public declarations }
  6.   end;
  7.  
  8. type
  9.   lucianoGrid = class(TDBGrid);
  10.  
  11.  
  12. var
  13.   Form1: TForm1;
  14.  
  15. implementation
  16.  
  17. {$R *.dfm}
  18.  
  19. procedure TForm1.FormShow(Sender: TObject);
  20. begin
  21. lucianoGrid(dbgrid1).DefaultRowHeight:=50;
  22. lucianoGrid(DBGrid1).RowHeights[0] := 17; // fila de tí­tulos
  23. end;
  24.  
  25. procedure TForm1.DBGrid1ColumnMoved(Sender: TObject; FromIndex,
  26.   ToIndex: Integer);
  27. begin
  28.   inherited;
  29.  
  30.   lucianoGrid(dbgrid1).DefaultRowHeight:= 50;
  31.   lucianoGrid(DBGrid1).RowHeights[0] := 17;
  32.  
  33.  
  34. end;
  35.    




  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 23 julio 2009 - 08:13

Ensaya esto, es una interposición de clase.


delphi
  1. type
  2.   TMyDBGrid = class(TDBGrid)
  3.   public
  4.     property DefaultRowHeight;
  5.   end;
  6.  
  7. var
  8.   Form1: TForm1;
  9.  
  10. implementation
  11.  
  12. {$R *.DFM}
  13.  
  14.  
  15. procedure TForm1.FormCreate(Sender: TObject);
  16. begin
  17.   DbGrid1.Canvas.Font.Size := 13;
  18.   TMyDBGrid(DBGrid1).DefaultRowHeight := DBGrid1.Canvas.TextHeight('MMMMM') + 4;
  19. end;



o con esta



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   DBGrid1.DataSource.DataSet.DisableControls;
  4.   TStringGrid(DBGrid1).DefaultRowHeight := 55;
  5.   DBGrid1.DataSource.DataSet.EnableControls;
  6. end;



Espero te sirva
saludos
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 julio 2009 - 08:57

Gracias Wilson por tu respuesta.

El problema es que cuando se cambia en tiempo de ejecucion el ancho de la columna, esta se vuelve a poner
del tamaño normal.

No quiero restringir la posibilidad de cambiar el ancho de la columna en ejecucion, porque voy a presentar un
campo memo y deseo se pueda ver completo en algun momento.

Lo que deseo hacer es que cuando alguien cambie el ancho de la columna, el programa indique que la configuracion de la altura no debe variar.



  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 23 julio 2009 - 09:52

Prueba con esta intentando sobrescribir el procedimiento ColWidthsChanged


delphi
  1. type
  2.   TLucianoDBGrid = class(TDBGrid)
  3.   protected
  4.     procedure ColWidthsChanged; override;
  5.   end;
  6.  
  7. procedure TLucianoDBGrid.ColWidthsChanged;
  8. begin
  9. //tu codigo
  10. end;
  11.  
  12. end.


  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 23 julio 2009 - 10:15

Aqui refino el codigo de la idea del ejemplo del post anterior, está probado en Delphi 2009. espero te sirva.


delphi
  1. type
  2.  
  3.   TDBGrid = class(DBGrids.TDBGrid)
  4. protected
  5. procedure ColWidthsChanged; override;
  6. end;
  7.   TForm1 = class(TForm)
  8.     DBGrid1: TDBGrid;
  9.   private
  10.     { Private declarations }
  11.   public
  12.     { Public declarations }
  13.   end;
  14.  
  15. var
  16.   Form1: TForm1;
  17.  
  18. implementation
  19.  
  20. {$R *.dfm}
  21. procedure TDBGrid.ColWidthsChanged;
  22. begin
  23. // este codigo se ejecuta en todos los DBGrid que pongas en este form
  24.   showmessage('Luciano');
  25. inherited ColWidthsChanged;
  26. end;
  27.  
  28. end.



Si es necesario puedes quitar la linea del inherited ColWidthsChanged o pasarla a la parte superior del procedimiento.

Saludos
  • 0

#6 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 julio 2009 - 12:48

Gracias por tus respuestas, si me funciona bien.
Pero, porque siempre hay algun pero.  Me gustaria dejar el tamaño de los titulos mas pequeños, porque ahora me los pone del mismo tamaño que el de las columnas.

Puse esto en un fomulario nuevo y me funciona de maravilla, pero si lo pongo en un formulario que ya tengo creado solo me cambia cuando muevo el ancho de la columna. Que crees que puedo estar haciendo mal para que codigo del oncreate del form no funcione.

Gracias de nuevo  (y)  (b)




  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 23 julio 2009 - 12:53

Gracias por tus respuestas, si me funciona bien.
Pero, porque siempre hay algun pero.  Me gustaria dejar el tamaño de los titulos mas pequeños, porque ahora me los pone del mismo tamaño que el de las columnas.

Puse esto en un fomulario nuevo y me funciona de maravilla, pero si lo pongo en un formulario que ya tengo creado solo me cambia cuando muevo el ancho de la columna. Que crees que puedo estar haciendo mal para que codigo del oncreate del form no funcione.

Gracias de nuevo  (y)  (b)


Pues la razón de esto es que el evento OnCreate solo te funciona cuando incias la aplicación, para que puedas redimensionar tu dbGrid puedes usar el método OnShow o el método OnPaint de la forma que creo serí­a la mejor opción.

Salud OS
  • 0

#8 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 julio 2009 - 01:02

Gracias Egostar por tu respuesta.

Ya estaba esperando tu ayuda, porque la idea de poner las columnas mas altas, la tomé de una imagen que vi de un programa tuyo. 

La prueba la estaba haciendo cuando abria el programa, pero voy a hacerlo como me dices y te comento.
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 23 julio 2009 - 01:07

Gracias Egostar por tu respuesta.

Ya estaba esperando tu ayuda, porque la idea de poner las columnas mas altas, la tomé de una imagen que vi de un programa tuyo. 

La prueba la estaba haciendo cuando abria el programa, pero voy a hacerlo como me dices y te comento.


Ah vaya, lo que pasa es que eso no es un DBGrid es un StringGrid, pequeña diferencia :D

Salud OS
  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 23 julio 2009 - 01:21

Se me ocurre que la razón por la que el evento OnCreate te funciona en un form nuevo y no en un viejo (que según entiendo es el problema actual) podrí­a ser el orden de creación de los componentes como el orden en las declaraciones, podrí­as ensayar primero colocando de últimas en la claúsula uses de la interface las units Grids, DBGrids; luego en la declaración de tipo del TForm justo depues de este colocar los DBGrids y finalmente en la implementación colocar de primero el procedure  TDBGrid.ColWidthsChanged.

Ensaya y me cuentas.
Saludos


  • 0




IP.Board spam blocked by CleanTalk.