Trocando cor da fonte em Grid com RowSelect
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:
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+!
É 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
Curtidas 0
Respostas
Delphi32
14/11/2006
Resolvi usando:
O único problema é que tive que ativar dgAlwaysShowSelection, o que não foi algo tão ruim assim.
t+!
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