Fórum Colocando cor em um dbgrid #366485

27/11/2008

0

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


Cleiflavio

Cleiflavio

Responder

Posts

27/11/2008

Sistemald

é simples veja o código de fazer zebrado em dbgrid

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.


Responder

Gostei + 0

27/11/2008

Cleiflavio

Mas em que evento do dbgrid eu coloco ????


Clei


Responder

Gostei + 0

27/11/2008

Sistemald

OnDrawColumncell,

aproveitando eu tenho um dbgrid com varios recursos, http://desenvolvedor.donato.inf.br, herda do Dbgrid e é opensource


Responder

Gostei + 0

27/11/2008

Cleiflavio

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


Responder

Gostei + 0

27/11/2008

Sistemald

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


Responder

Gostei + 0

27/11/2008

Cleiflavio

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 ?


Responder

Gostei + 0

27/11/2008

Pestana_

tente assim:
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!


Responder

Gostei + 0

27/11/2008

Pestana_

:D já estava me esquecendo, coloque este código no evento [b:96998120b4]OnDrawColumncell[/b:96998120b4] do dbGrid!


Responder

Gostei + 0

27/11/2008

Cleiflavio

PEstana_ valeuuu deu certo era isso que eu queria mesmo.

Muito Obrigadoooo


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar