Yo lo he logrado con el código que puse anteriormente. (Modificado un poco)
Resumiendo:
Poner AutoCalcFields = False;
Creando un campo calculado
Creando el evento OnCalcFields
Código Delphi
[-]
procedure TDMMayor.xMayorBeforeOpen(DataSet: TDataSet);
begin
Sombra := False;
ValorAnterior := '';
end;
procedure TDMMayor.xMayorCalcFields(DataSet: TDataSet);
begin
if (DataSet.FieldByName('SOMBRA').AsInteger = 0) then
begin
if (ValorAnterior <> DataSet.FieldByName('ASIENTO').AsString) then
begin
Sombra := not Sombra;
ValorAnterior := DataSet.FieldByName('ASIENTO').AsString;
end;
if (Sombra) then
DataSet.FieldByName('SOMBRA').AsInteger := 1
else
DataSet.FieldByName('SOMBRA').AsInteger := 2;
end;
end;
procedure TFCMayor.DBGConsultaDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: integer; Column: TColumn; State: TGridDrawState);
begin
with TDBGrid(Sender) do
begin
if (gdFocused in State) then begin
Canvas.Font.Color := clWhite;
Canvas.Brush.Color := clHighlight;
end
else
begin
if (DataSource.DataSet.FieldByName('SOMBRA').AsInteger = 2) then
begin
Canvas.Font.Color := clBlack;
Canvas.Brush.Color := clYellow;
end
else
begin
Canvas.Font.Color := clBlack;
Canvas.Brush.Color := clInfoBk;
end;
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;