Al final he hecho lo siguiente:
Código Delphi
[-]
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
if (DMMayor.xMayorSOMBRA.AsInteger = 1) then
begin
Canvas.Font.Color := clBlack;
Canvas.Brush.Color := clCream;
end
else
begin
Canvas.Font.Color := clBlack;
Canvas.Brush.Color := clInfoBk;
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
var
Sombra : boolean;
ValorAnterior : string;
procedure TDMMayor.xMayorBeforeOpen(DataSet: TDataSet);
begin
Sombra := False;
ValorAnterior := '';
end;
procedure TDMMayor.xMayorCalcFields(DataSet: TDataSet);
begin
if (ValorAnterior<>xMayorASIENTO.AsString) then
begin
Sombra := not Sombra;
ValorAnterior := xMayorASIENTO.AsString;
end;
if (Sombra) then
xMayorSOMBRA.Value := 1
else
xMayorSOMBRA.Value := 0;
end;
El único problema es que la última parte donde asigno al campo sombra un valor, la pasa por alto y siempre es 0.
He probado con AutoCalcFields en False y en True, con el mismo resultado.
Puede ser porque estoy probando con unos componentes que descienden de FreeIB.
Si alguien lo puede probar con otros componentes DataSets que informe si le funciona.