Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBGrid filas de colores segun su contenido (https://www.clubdelphi.com/foros/showthread.php?t=13596)

ramonibk 24-08-2004 19:33:47

DBGrid filas de colores segun su contenido
 
Bueno me gustaría saber si alguien me puede decir como se puede cambiar el color de una fila en un DbGrid dependiendo de su contenido.



El caso es que estoy tirando de una base de datos en SQL y me gustaria cambiar la sila de color dependiendo de si la fecha esta vencida (Fecha anterior a la actual) o bien si existe alta prioridad.

Por cierto estoy usando Delphi 5

ramonibk 24-08-2004 19:49:21

POr cierto en principio lo que tengo pensado hacer es generar un Query que cada X me lea el registro y me compare las fechas con la checha actual.

mi duda surge a la hora de poner la linea en otro color dependiendo del resultado del query

roman 24-08-2004 20:15:03

Es muy fácil. Tienes que usar el evento OnDrawColumnCell del DBGrid. Este evento se generará cada vez que el control necesite dibujar una celda pasándote como parámetro la columna sobre la que está la celda. Sólo tienes que verificar las condiciones del registro actual y cambiar el color del canvas si se cumple la condición y dejar que continúe el proceso normal de dibujado.

Aquí un ejemplo:

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(...);
begin
  if FechaVencida and (gdSelected in State) then
    DBGrid1.Canvas.Font.Color := clRed;

  // Pintado normal
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Aquí las filas con fechas vencidas aparecerán con letra de color rojo aunque me parece que también puedes usar

DBGrid1.Canvas.Brush.Color := clRed;

para que sea el fondo de la fila el que aparece en rojo.

La condición (gdSelected in State) no es necesaria pero yo la uso porque se me hace un poco confuso que la fila seleccionada también aparezca en otro color ya que entonces no sé si está seleccionada.

Si desearas colorear únicamente la celda (y no toda la fila) con el campo fecha podrías añadir la condición de que la columna coincida con el campo, algo como:

Código Delphi [-]
if (Column.FieldName = 'fechavencida') then
  ...

// Saludos


La franja horaria es GMT +2. Ahora son las 09:32:52.

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