Este es el código:
Código Delphi
[-]procedure TForm24.gr1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
background_colors: array[0..1] of TColor = (clYellow, clWhite);
var
BackgroundColor: TColor;
begin
if (UltimoValor > qr1.FieldByName('NUMEROASIENTO').Value) then
begin
if Pos(Format('-%s-', [qr1.FieldByName('NUMEROASIENTO').Value]), GrupoImpar) > 0 then
BackgroundColor := background_colors[1]
else
BackgroundColor := background_colors[0];
end
else
begin
if qr1.FieldByName('NUMEROASIENTO').Value <> UltimoValor then
BoolSwitch := (not BoolSwitch);
BackgroundColor := background_colors[Integer(BoolSwitch)];
UltimoValor := qr1.FieldByName('NUMEROASIENTO').Value;
end;
if not (gdSelected in State) then
TDBGrid(Sender).Canvas.Brush.Color := BackgroundColor;
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
if not (UltimoValor > qr1.FieldByName('NUMEROASIENTO').Value) then
if (BoolSwitch) and (Pos(Format('-%s-', [qr1.FieldByName('NUMEROASIENTO').Value]), GrupoImpar) = 0) then
GrupoImpar := (GrupoImpar + Format('-%s-', [qr1.FieldByName('NUMEROASIENTO').Value]));
end;
Cada vez que se hace la consulta hay que reiniciar las variables globales (UltimoValor, GrupoImpar, BoolSwitch) de esta forma:
Código Delphi
[-] UltimoValor := 0;
GrupoImpar := '';
BoolSwitch := False;
No es un código perfecto. Obviamente se puede obtimizar un poco, de hecho creo que deberían tomarlo tipo pseudocodigo. Pero en mis pruebas ha funcionado según los requerimientos que le entiendo a casimiro. Cualquier inconveniente, pues dejadlo saber.
Saludos,
Chris