Ver Mensaje Individual
  #1  
Antiguo 14-02-2011
isnagil isnagil is offline
Miembro
 
Registrado: jun 2010
Posts: 39
Reputación: 0
isnagil Va por buen camino
Al hacer scroll no se dibuja un rectángulo en una celda de un dbgrid

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é?

Última edición por isnagil fecha: 14-02-2011 a las 18:45:26.
Responder Con Cita