Hola a todos:
Mi duda es la siguiente:
Pinto un rectángulo de color en una celda de una dbgrid de acuerdo con el valor de un campo:
Código Delphi
[-]
procedure TfrmVisitas.DibujarColorEnTabla(Sender: TObject; ColorCuadro: integer; Rect: TRect);
const
color: array[1..20] of tcolor = (clred, clBlue, clGreen, clAqua, clCream, clDkGray, clFuchsia, clLime, clLtGray, clMaroon, clMoneyGreen, clNavy, clGray, clOlive, clPurple, clSilver, clSkyBlue, clTeal, clWhite, clBlack);
var
posicionCuadro: TRect;
begin
(Sender as TRzDBGrid).Canvas.FillRect(Rect);
(Sender as TRzDBGrid).Canvas.Brush.Color := color[ColorCuadro];
(Sender as TRzDBGrid).Canvas.Pen.Color := clBlack;
posicionCuadro.Left := Rect.Left + ((Rect.Right - Rect.Left - COLOR_WIDTH) div 2);
posicionCuadro.Right := posicionCuadro.Left + COLOR_WIDTH;
posicionCuadro.Top := Rect.Top + ((Rect.Bottom - Rect.Top - COLOR_HEIGHT) div 2);
posicionCuadro.Bottom := posicionCuadro.Top + COLOR_HEIGHT;
(Sender as TRzDBGrid).Canvas.Rectangle(posicionCuadro);
if (ColorCuadro = 0) then
begin
(Sender as TRzDBGrid).Canvas.Brush.Color := clWhite;
(Sender as TRzDBGrid).Canvas.Pen.Color := clBlack;
(Sender as TRzDBGrid).Canvas.FillRect(posicionCuadro);
(Sender as TRzDBGrid).Canvas.Rectangle(posicionCuadro);
(Sender as TRzDBGrid).Canvas.MoveTo(posicionCuadro.Left, posicionCuadro.Top);
(Sender as TRzDBGrid).Canvas.LineTo(posicionCuadro.Right, posicionCuadro.Bottom);
(Sender as TRzDBGrid).Canvas.MoveTo(posicionCuadro.Right - 1, posicionCuadro.Top);
(Sender as TRzDBGrid).Canvas.LineTo(posicionCuadro.Left - 1, posicionCuadro.Bottom);
end;
end;
Lo llamo desde el OnDrawColumnCell del dbGrid
Código Delphi
[-]
if (Column.Title.Caption = 'Lesión') then
begin
DibujarColorEnTabla(Sender, Column.Field.AsInteger, Rect);
end;
Hasta aquí todo bien el problema es que al hacer un scroll de la tabla no se dibujan los cuadrados de color, aparece un integer (el valor del campo)
¿Por qué?