DBGrid .. não fica com fundo azul qd modifico a cor de fundo

Delphi

01/11/2005

Amigos,
coloquei um DBGrid em uma tela de consulta de produtos e coloquei um código no evento OnDrawColumnCell para modificar a cor de fundo da linha para verde caso o estoque esteja superior ou vermelhor caso o estoque esteja inferior.

O problema é q qd seleciono alguma linha em q o fundo foi modificado ela não fica azul com letras brancas, somente as letras ficam brancas.

O que faço para resolver este problema?

procedure TfrmProdutos.dbgConsultaDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  inherited;
  if cdsConsultarESTMIN.AsInteger > cdsConsultarESTOQUE.AsInteger then
    dbgConsulta.Canvas.Brush.Color := $CCCCFF;
  if cdsConsultarESTMAX.AsInteger < cdsConsultarESTOQUE.AsInteger then
    dbgConsulta.Canvas.Brush.Color := clMoneyGreen;
  dbgConsulta.DefaultDrawDataCell(Rect, dbgConsulta.columns[datacol].field, State);
end;



Orlando Frade

Orlando Frade

Curtidas 0

Respostas

Massuda

Massuda

01/11/2005

Você deveria levar em conta o estado da linha ao fazer a mudança; por exemplo, se for para deixar com a aparência default quando a linha estiver selecionada, ficaria assim...
procedure TfrmProdutos.dbgConsultaDrawColumnCell(Sender: TObject; 
  const Rect: TRect; DataCol: Integer; Column: TColumn; 
  State: TGridDrawState); 
begin 
  // a princípio, isso não é necessário
  //inherited; 

  if not (gdSelected in State) then begin

    if cdsConsultarESTMIN.AsInteger > cdsConsultarESTOQUE.AsInteger then 
      dbgConsulta.Canvas.Brush.Color := $CCCCFF; 
    if cdsConsultarESTMAX.AsInteger < cdsConsultarESTOQUE.AsInteger then 
      dbgConsulta.Canvas.Brush.Color := clMoneyGreen; 
  end;
  // o correto seria chamar DefaultDrawColumnCell
  dbgConsulta.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
end;



GOSTEI 0
POSTAR