Supongo que en tu caso particular, tienes puesto a False el campo RowSelect de la propiedad Options del DBGrid.
Entonces según tu código
Código Delphi
[-]if (state = [gdSelected]) ...
precisamente lo que estás haciendo es cambiar de color sólo la Celda (...y fila) que tiene selección en un momento determinado.
Sinceramente, no me he puesto a buscar la solución ya que yo utilizo siempre los DBGrid's con RowSelect a True.
Pero deberás de analizar si los campos que has de cambiar de color son de la fila que en ese momento está seleccionada, y cambiar su color según tus preferencias, no sólo a la celda que tiene la selección y por tanto el State a gdSelected.
Con el dgRowSelect a True basta con esto :
Código Delphi
[-]If (gdSelected in State) then DBGrid1.Canvas.Brush.Color := tuColor;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Saludos
