Hola, creo que el problema que tiene el amigo no es en el pintado ya que su codigo funciona sino en colocar la condición y que cuando se haga doble click sobre un registro del se pinte.
Como te dijo Crandel necesitas un campo que te haga de condición y que maneje los valores que necesitas, talvez sería bueno que aumentes un campo Estado donde 1 signifique activo y 0 No activo, los que tengas con 0 los pintas del color que quieras, ahora en el evento dobleClick del DbGrid tendrías que modificar el valor de 1 a 0 o de 0 a 1, una vez que se refresque nuevamente el DBGrid con los cambios que acabas de hacer se activara nuevamente el evento OnDrawColumnCell para hacer el repintado.
Código Delphi
[-]
procedure TForm1.DBGridDblClick(Sender: TObject);
var
codigo : String;
begin
Query.Close;
Case QueryDBGrid.FieldByName('estado').AsInteger Of
0 : Query.SQL.Text := 'Update tabla set estado=1 '+
'where codigo='+QueryDBGrid.FieldByName('codigo').AsInteger;
1: Query.SQL.Text := 'Update tabla set estado=0 where '+
'codigo='+QueryDBGrid.FieldByName('codigo').AsInteger;
end;
Query.ExecSQL;
QueryDBGrid.Close;
QueryDBGrid.SQL.Text := 'select * from tabla';
QueryDBGrid.Open;
end;
Y despues como ya te han indicado preguntarías por ese campo estado.
Código Delphi
[-]
procedure TF_VentaPlato.DBG_DetallesPlatoOnDrawColumns(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn;State: TGridDrawState);
begin
if QueryDBGrid.FieldbyName('estado').AsInteger = 0 then
begin
DBG_DetallesPlato.Canvas.Font.Style := DBG_DetallesPlato.Canvas.Font.Style + [fsBold];
DBG_DetallesPlato.Canvas.Brush.Color := clRed;
DBG_DetallesPlato.Canvas.FillRect(Rect);
State := [gdSelected, gdFocused];
DBG_DetallesPlato.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
Saluditos