Hola,
Pues a como lo entiendo para hacer lo que buscas deberías leer el campo en cuestión, y compararlo con el anterior leído. En caso de ser diferente, se altera el color y se pinta con ese. En otro caso sigue pintando por el defecto.
Inicialmente se lee el primer registro y se decide el color inicial y se guarda en una variable auxiliar el valor del campo de este registro. Se pinta el primer registro con el color inicial.
En lo sucesivo se va comparando el valor del campo con el de la variable auxiliar y en caso de ser diferente se guarda en variable auxiliar este valor, se altera el color.
Para lograr la alteración entre dos colores yo tendría algo como esto:
type
ColorDoble = array[boolean] of TColor;
De ese modo tendría los dos colores, por ejemplo:
Código Delphi
[-]var
MiColorDoble: TColorDoble;
...
MiColorDoble[true] := clRed;
MiColorDoble[false] := clBlue;
Y de modo que cuando se cumpla:
Código Delphi
[-]
ValorCampo := NombreDataSet.FieldbyName('CAMPO').AsInteger;
if ValorCampo <> ValorAux
Provocar un cambio en el color elegido por pintar, Algo como:
Código Delphi
[-]if ValorCampo <> ValorAux
then Cambiar := NOT Cambiar; ColorElegido := MiColorDoble[Cambiar];
DBGrid.Canvas.Brush.Color := ColorElegido;
DefaultDrawColorCell(....)
La idea no es ofrecer el código exacto. No tengo Delphi a mano, pero al menos orientar un poco las cosas.
Saludos,