Trocando cor da fonte em Grid com RowSelect

Delphi

14/11/2006

Putz... sei que deve ser algo bem fácil, mas não estou conseguindo fazer.... Procurei no fórum mas não achei nenhum tópico na mesma situação...

É o seguinte: Tenho um DBGrid com dgRowSelect. Estou manipulando o evento OnDrawColumnCell. Se o campo QUANT for igual a 0 a fonte deve ser vermelha caso contrário deve verificar se essa linha está selecionada no grid. Se estiver selecionada a fonte é branca se não é preta.

meu evento está assim:

procedure Tfrminfobaixa.DBGrid2DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   p := DBGrid2.Canvas.Font.Color;
   if ClientDataSet1QUANT.AsInteger<>0 then
   begin
      if gdFocused in State then
      DBGrid2.Canvas.Font.Color := clWhite else
      DBGrid2.Canvas.Font.Color := clBlack;
   end
   else
   DBGrid2.Canvas.Font.Color := clRed;
   DBGrid2.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Esse código funciona perfeitamente se o RowSelect não estiver habilitado. Isso porque quando ele está habilitado o Grid só retorna gdFocused para a Coluna 0 do Grid. Sendo assim, quando eu seleciono no grid uma linha onde quantidade é diferente de 0, a primeira coluna (0) fica com fonte branca e o resto com fonte preta...

Sei que tenho que trocar a condição ´if gdFocused in State then´ por alguma coisa que retorne se essa coluna pertence à linha selecionada ou não.

Alguém sabe o que fazer?

t+!


Delphi32

Delphi32

Curtidas 0

Respostas

Delphi32

Delphi32

14/11/2006

Resolvi usando:

   if ClientDataSet1QUANT.AsInteger<>0 then
   begin
      if (gdSelected in State) or (DBGrid2.SelectedRows.CurrentRowSelected) then
      DBGrid2.Canvas.Font.Color := clWhite else
      DBGrid2.Canvas.Font.Color := clBlack;
   end


O único problema é que tive que ativar dgAlwaysShowSelection, o que não foi algo tão ruim assim.

t+!


GOSTEI 0
POSTAR