Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Colorear las lineas de un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=24520)

Anunakis 24-08-2005 11:35:15

Colorear las lineas de un DBGrid
 
Hola a todos,

Mi pregunta es la siguiente:
¿Como puedo hacer para que un DBGrid me salgan sus lineas alternado el color, por ejemplo blanco y amarillo, para que genere el tipico efecto que sale en la mayoria de sitios.

He probado en DBGrid1DrawColumnCell pero no se como especificar que si la linea es par sea blanca o impar amarilla ya que este evento es para las columnas y no las filas.

Gracias de antemano

dec 24-08-2005 11:43:54

Hola,

Esta búsqueda en los Foros ofrece, entre otros Hilos, este, este y este, que creo pueden echarte una mano.

Anunakis 24-08-2005 12:16:52

No me ha servido porque yo lo que busco es pintar las lineas y no las columnas, lo que busco es como saber si estoy en una linea par o impar de un DBGrid porque el pintar no es el problema sino la condicion esa.

De todos modos gracias por contestar y por la rapidez.

ContraVeneno 24-08-2005 16:35:36

El DBGrid de las JVCL tiene una propiedad AlternateRowColor y otra AlternateRowFontColor en donde defines que color quieres para las filas pares.

La dbgrid de SM tambien maneja colores alternados, incluso tiene varias combinaciones de colores ya definidas.

En pocas palabras, con estos componentes no tienes que programar nada de código para tener el efecto que pides, solo hay que definir los colores en las propiedades.

La dbgrid de sm es dos o tres compnenetes solamente y las JVCL se intala junto con un motón de componentes. Lo más rápido sería utilizar la de SM , pero yo utilizaría las JVCL ya que estoy seguro que tambien te podrán ayudar con más cosas.

Anunakis 26-08-2005 14:39:28

Ya conocia esos grids de las JVCL pero los de SM no. El caso es que, aunque tenga que programas me da igual, lo que pasa es que tengo un proyecto de mas de 60grids cada uno con sus propiedades y eventos asignados y no es plan de cambiar todo eso.

Yo habia pensado en un codigo que me lo pintase y asignarles a todo ese mismo procedimiento y asi me ahorro mucho trabajo.

Gracias de todas formas, veo que hay gente que le pone interes a las dudas de los demas.

Chente(rMan) 26-08-2005 16:08:06

Que tal Anunakis, yo tambien ya habia buscado esto que preguntas, y lo habia buscado tambien en los hilos que te enviaron, pero ahi no encontre nada, de cualquier manera aqui te envio la solución.


en el evento OnDrawColumnCell de tu dbgrid agrega este código:

Código Delphi [-]
  with (Sender as TDBGrid) do
    begin
      if DataSource.DataSet.RecNo mod 2 = 0 then
        Canvas.Brush.Color := $00F8FFC6
      else
        Canvas.Brush.Color := clWhite;
      Canvas.Font.Color := Font.Color;
      DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;

y listo!!! ;)


Saludos.


Vicente López.

Anunakis 29-08-2005 12:39:33

Hola Chenter(Man), probé el codigo que me pusistes en cuanto pude pero no he conseguido hacerlo funcionar ya que siempre me hace el "else" de la condicion y por tanto me lo pone todo en blanco, salvo cuando el dbgrid no tiene registros y la primera fila (vacia) me sale en ese color azulillo.

Yo utilizo D7 con BDE, ¿tendrá algo que ver?.
Lo probaré con ADO aver que tal.

Anunakis 29-08-2005 12:44:13

Efectivamente con ADO funciona a la perfeción, el fallo es que tengo todo el proyecto con BDE, jeje, y tendré asi como unas 40 50 tablas con su codigo especifico de BDE.

Seguiré probando cosas de todas maneras y alomejor el codigo que me as pasado lo puedo amoldar a BDE, si alguién sabe como hacerlo que me lo comente porfavor.

Gracias

kuan-yiu 14-06-2006 13:00:12

Recuadrar líneas de un DBGrid
 
Mi problema es parecido, así que añado mi pregunta aquí.
Yo tengo esta función de coloreado de filas que funciona perfectamente:
Código Delphi [-]
  if (qfacturaITOT.IsNull) then
    begin
      gFacturas.canvas.brush.color := clwhite;
      gFacturas.canvas.font.color := clblack;
      gFacturas.canvas.fillrect(rect);
    end
  else
    begin
      gFacturas.canvas.brush.color := clAqua;
      gFacturas.canvas.font.color := clblack;
      gFacturas.canvas.fillrect(rect);
    end;
  gFacturas.DefaultDrawColumnCell(Rect, DataCol, Column, State);
El problema es que ahora quieren cambiarlo: quieren que en lugar de colorear la fila entera sólo dibuje un recuadro en la fila, enmarcarla en lugar de rellenarla. Y no tengo ni idea de cómo hacerlo, lo que he intentado hasta el momento no me ha funcionado.
¿Alguien sabe cómo hacerlo o es imposible?

Gracias de antemano.

hugobenitez 23-02-2012 12:34:53

filas de diferentes colores
 
Hola Chicos, es mi primer y humilde aporte a vuestros bastos conocimientos sobre el tema.

Yo lo solucione asi:

if (odd(TDBGrid(Sender).DataSource.DataSet.RecNo)=TRUE) and not (gdSelected in State) then
begin
TDBGrid(Sender).canvas.Font.Color:=clBlack;
TDBGrid(Sender).canvas.Brush.Color:=clSilver;
end;
TDBGrid(Sender).DefaultDrawColumnCell(rect,DataCol,Column,State);


Utilizo Delphi 5. Un abrazo y gracias por tantas soluciones para todos.


La franja horaria es GMT +2. Ahora son las 19:35:01.

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