Ver Mensaje Individual
  #3  
Antiguo 24-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita