Colocando cor em um dbgrid
Fala Galeraaaa.
Presciso de uma ajuda.
Tenho uns cadastro de caixa aqui em meu sistema e tenho um DBgrid que mostra os Status dessas caixa.
Campos do DBgrid CAIXA, DATA, HORA e STATUS
então nesse meu DB grid é mostrado todas as caixas que eu cadastrei e os status delas.
eu tenho dois status , Disponivel, Indisponivel.
Eu queria que quando abrisse o Dbgrid mostrasse no Status quando for DIsponivel ficasse em Azul e Indisponivel ficasse em vermelho.
Alguem poderia me ajudar ???
Presciso de uma ajuda.
Tenho uns cadastro de caixa aqui em meu sistema e tenho um DBgrid que mostra os Status dessas caixa.
Campos do DBgrid CAIXA, DATA, HORA e STATUS
então nesse meu DB grid é mostrado todas as caixas que eu cadastrei e os status delas.
eu tenho dois status , Disponivel, Indisponivel.
Eu queria que quando abrisse o Dbgrid mostrasse no Status quando for DIsponivel ficasse em Azul e Indisponivel ficasse em vermelho.
Alguem poderia me ajudar ???
Cleiflavio
Curtidas 0
Respostas
Sistemald
27/11/2008
é simples veja o código de fazer zebrado em dbgrid
Nesse código a primeira parte checa se a coluna que esta pintando esta selecionada, no else verifica se a linha é impar, caso seja pinta de uma determinada cor.
No seu caso ao invés de verificar se é impar verifica se o caixa é disponivel ou não.
if DataSource.DataSet.RecordCount = 0 then exit; if (gdSelected in State) then // se a célula não está selecionada begin Canvas.Font.Style:=[fsBold]; Canvas.Font.Color:= FCorFontSelected; Canvas.Brush.Color:=FCorSelected; // define uma cor de fundo canvas.FillRect(Rect); // pinta a célula DefaultDrawDataCell(rect,Column.Field,State); // Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);//**** end else begin if odd(DataSource.Dataset.RecNo) then // se for ímpar begin Canvas.Brush.Color:=FCor; // define uma cor de fundo canvas.FillRect(Rect); // pinta a célula DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão end; end;
Nesse código a primeira parte checa se a coluna que esta pintando esta selecionada, no else verifica se a linha é impar, caso seja pinta de uma determinada cor.
No seu caso ao invés de verificar se é impar verifica se o caixa é disponivel ou não.
GOSTEI 0
Cleiflavio
27/11/2008
Mas em que evento do dbgrid eu coloco ????
Clei
Clei
GOSTEI 0
Sistemald
27/11/2008
OnDrawColumncell,
aproveitando eu tenho um dbgrid com varios recursos, http://desenvolvedor.donato.inf.br, herda do Dbgrid e é opensource
aproveitando eu tenho um dbgrid com varios recursos, http://desenvolvedor.donato.inf.br, herda do Dbgrid e é opensource
GOSTEI 0
Cleiflavio
27/11/2008
então esse codigo faz meu dbgrid Zebrado blz, mas não é exatamente oq eu quero , eu queria que quando fosse disponivel somente a palavra disponivel ficasse azul e não a linha toda.
Isso seria possivel ???
Isso seria possivel ???
GOSTEI 0
Sistemald
27/11/2008
if DataSource.DataSet.RecordCount = 0 then exit; if (gdSelected in State) then // se a célula não está selecionada begin if DataSource.Dataset.FieldByName(´disponivel´) then // checando um campo na tabela begin Canvas.Font.Style:=[fsBold]; //coloca negrito Canvas.Font.Color:= FCorFontSelected; //defini a cor do texto Canvas.Brush.Color:=FCorSelected; // define uma cor de fundo canvas.FillRect(Rect); // pinta a célula -> não altere aqui DefaultDrawDataCell(rect,Column.Field,State); //não altere aqui end; end;
Seria algo mais ou menos assim, para pintar apenas a celula selecionada
GOSTEI 0
Cleiflavio
27/11/2008
Isso tbm não seria oq eu quero, deixa eu te explicar melhor .
Tenho um DBgrid com os campos CAIXA, DATA, HORA e STATUS
eu tenho varios registro e eu queria que quando abrisse o DBgrid aparecesse no campo STATUS a diferença de cor entre DISPONIVEL e INDISPONIVEL que quando for DIsponivel ficasse azul e quando fosse Indisponivel ficasse Vermelho mas eu queria que somente essa campo ficasse assim e o resto fique normal.
Teria como ?
Tenho um DBgrid com os campos CAIXA, DATA, HORA e STATUS
eu tenho varios registro e eu queria que quando abrisse o DBgrid aparecesse no campo STATUS a diferença de cor entre DISPONIVEL e INDISPONIVEL que quando for DIsponivel ficasse azul e quando fosse Indisponivel ficasse Vermelho mas eu queria que somente essa campo ficasse assim e o resto fique normal.
Teria como ?
GOSTEI 0
Pestana_
27/11/2008
tente assim:
troque o nome do seu dataSet e o dbGrid.
espero ter ajudado!
if Column.Field = seuDataSetSTATUS then begin if AnsiUpperCase(seuDataSetSTATUS.AsString) = ´DISPONIVEL´ then dbGrid1.Canvas.Font.Color := clBlue else dbGrid1.Canvas.Font.Color := clRed; dbGrid1.DefaultDrawDataCell(rect, Column.Field, state); end;
troque o nome do seu dataSet e o dbGrid.
espero ter ajudado!
GOSTEI 0
Pestana_
27/11/2008
:D já estava me esquecendo, coloque este código no evento [b:96998120b4]OnDrawColumncell[/b:96998120b4] do dbGrid!
GOSTEI 0
Cleiflavio
27/11/2008
PEstana_ valeuuu deu certo era isso que eu queria mesmo.
Muito Obrigadoooo
Muito Obrigadoooo
GOSTEI 0