Creo que el problema viene que, cuando pintamos la primera columna y preguntamos si el dato cambia, cambiamos el color (correcto); pero no podemos cambiar la variable que controla dicho cambio, porque entonces, el resto de las columnas volverían a cambiar.
He probado con esto y me ha funcionado:
Código Delphi
[-]
var
Dato: string = '';
Color: TColor = clWindow;
...
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DBgrid1.DataSource.Dataset.FieldbyName('campo').AsString <> Dato then
begin
if Column.Index = 0 then
if Color = clSkyBlue then
Color := clWindow
else
Color := clSkyBlue;
Dato :=
DBgrid1.DataSource.Dataset.FieldbyName('campo').AsString
end;
DBGrid1.Canvas.Brush.Color := Color;
DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
end;
Prueba a ver si te vale
Un saludo