Colorir uma celula no cxgrid
Boa tarde a todos,
Eu tenho um código para colorir uma celula do dbgrid em uma determinada situação:
//Alterando a Cor da Coluna CodEmp.
with dbgrid20 do
begin
if (column.field.fieldname) = 'codemp' then
begin
if ftd001datcan.value > 0 then
Canvas.Brush.Color := clred
else if ftd001temmdf.value = 1 then
Canvas.Brush.Color := clYellow
else
Canvas.Brush.Color := clbtnface;
Canvas.Font.Color := clwindowtext;
Canvas.FillRect(Rect);
end;
end;
Preciso que esse mesmo código funcione no cxgrid. O que consegui até agora é colorir de amarelo a coluna codemp inteira e nao é isso que dever fazer
Código que criei:
//Alterando a Cor da Coluna CodEmp.
if (AViewInfo.Item.Index = cxGrid5DBTableView1Column1.Index)then
begin
if ftd001datcan.value > 0 then
ACanvas.Brush.Color := clred
else if ftd001temmdf.value = 1 then
ACanvas.Brush.Color := clYellow
else
ACanvas.Brush.Color := clbtnface;
ACanvas.Font.Color := clwindowtext;
ACanvas.FillRect(AViewInfo.Bounds);
end;
Achei diversos ativo no google mas nenhum me ajuda, alguem que conhece pode me ajudar?
obrigado
"Deus Abençoe"
Eu tenho um código para colorir uma celula do dbgrid em uma determinada situação:
//Alterando a Cor da Coluna CodEmp.
with dbgrid20 do
begin
if (column.field.fieldname) = 'codemp' then
begin
if ftd001datcan.value > 0 then
Canvas.Brush.Color := clred
else if ftd001temmdf.value = 1 then
Canvas.Brush.Color := clYellow
else
Canvas.Brush.Color := clbtnface;
Canvas.Font.Color := clwindowtext;
Canvas.FillRect(Rect);
end;
end;
Preciso que esse mesmo código funcione no cxgrid. O que consegui até agora é colorir de amarelo a coluna codemp inteira e nao é isso que dever fazer
Código que criei:
//Alterando a Cor da Coluna CodEmp.
if (AViewInfo.Item.Index = cxGrid5DBTableView1Column1.Index)then
begin
if ftd001datcan.value > 0 then
ACanvas.Brush.Color := clred
else if ftd001temmdf.value = 1 then
ACanvas.Brush.Color := clYellow
else
ACanvas.Brush.Color := clbtnface;
ACanvas.Font.Color := clwindowtext;
ACanvas.FillRect(AViewInfo.Bounds);
end;
Achei diversos ativo no google mas nenhum me ajuda, alguem que conhece pode me ajudar?
obrigado
"Deus Abençoe"
Wilton Júnior
Curtidas 0
Respostas
Joel Rodrigues
19/08/2013
Você deve selecionar a coluna na qual quer aplicar essa formatação e acessar o evento OnCustomDrawCell (DA COLUNA, não do grid todo).
Aí lá você pode verificar o conteúdo da célula usando o objeto AViewInfo e mexer na formatação usando o objeto ACanvas. Por exemplo:
Aí eu verifiquei na coluna STATUS se alguma célula tem o texto "Inativo", Se tiver, pinto a fonte de vermelho.
É só adaptar.
Abraço.
Aí lá você pode verificar o conteúdo da célula usando o objeto AViewInfo e mexer na formatação usando o objeto ACanvas. Por exemplo:
procedure TFrmRelatorioPontoPedido.gridRelatorioDBTableView1STATUSCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if AViewInfo.Text = 'Inataivo' then
begin
ACanvas.Font.Color := clRed;
end;
end;Aí eu verifiquei na coluna STATUS se alguma célula tem o texto "Inativo", Se tiver, pinto a fonte de vermelho.
É só adaptar.
Abraço.
GOSTEI 0
Wilton Júnior
19/08/2013
Joel eu vi um exemplo desse em no google fiz e mesmo assim pintou toda a minha coluna.
para cada condição ela tem que ficar de uma cor.
para cada condição ela tem que ficar de uma cor.
GOSTEI 0
Joel Rodrigues
19/08/2013
Aqui deu certo, pintou só as células que atendem à condição. Confira se você está tratando o evento da coluna mesmo.
GOSTEI 0
Wilton Júnior
19/08/2013
Eu não sei o que fazer mais não...fui no obtao custome cliquei na column1 que é o codemp fui na propridade customdrawcell e ele pinta toda a coluna
procedure TCR001.cxGrid5DBTableView1Column1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
//Alterando a Cor da Coluna CodEmp.
if (AViewInfo.Item.Index = cxGrid5DBTableView1Column1.Index)then
begin
if ftd001datcan.value > 0 then
ACanvas.Brush.Color := clred
else if ftd001temmdf.value = 1 then
ACanvas.Brush.Color := clYellow
else
ACanvas.Brush.Color := clbtnface;
ACanvas.Font.Color := clwindowtext;
ACanvas.FillRect(AViewInfo.Bounds);
end;
end;
procedure TCR001.cxGrid5DBTableView1Column1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
//Alterando a Cor da Coluna CodEmp.
if (AViewInfo.Item.Index = cxGrid5DBTableView1Column1.Index)then
begin
if ftd001datcan.value > 0 then
ACanvas.Brush.Color := clred
else if ftd001temmdf.value = 1 then
ACanvas.Brush.Color := clYellow
else
ACanvas.Brush.Color := clbtnface;
ACanvas.Font.Color := clwindowtext;
ACanvas.FillRect(AViewInfo.Bounds);
end;
end;
GOSTEI 0
Joel Rodrigues
19/08/2013
Está pitando a coluna toda com que cor?
GOSTEI 0
Wilton Júnior
19/08/2013
Sim, no teste que eu faço com dbgrid fica certo mas quando uso o cxgrid da esse problema, vc que conhece muito mais que eu nao tem como vc fazer um teste com um modelo de pintanto a linha conforme o valor tomado de outros campos?
GOSTEI 0
Deivison Melo
19/08/2013
O comportamento do CxGrid é diferente do DBGrid por isso que seu código está certo em um e no outro o comportamento é diferente!
Veja se isso aqui ajudará desenvolver o que está desejando:
http://www.activedelphi.com.br/forum/viewtopic.php?t=72347&sid=9476dfb99be9e6957fe00a4f416fe5e7
Abração e bons Códigos!
Veja se isso aqui ajudará desenvolver o que está desejando:
http://www.activedelphi.com.br/forum/viewtopic.php?t=72347&sid=9476dfb99be9e6957fe00a4f416fe5e7
Abração e bons Códigos!
GOSTEI 0
Wilton Júnior
19/08/2013
Deivison, obrigado pela dica, mas tb já via esse post o problema é que o temmdf " if ftd001temmdf.value = 1" não aparece da cxgrid .
obrigado
obrigado
GOSTEI 0
Wilton Júnior
19/08/2013
Deivison, obrigado pela dica, mas tb já via esse post o problema é que o temmdf " if ftd001temmdf.value = 1" não aparece da cxgrid .
obrigado
obrigado
GOSTEI 0
Joel Rodrigues
19/08/2013
Cara, para cada linha no cxGrid existe uma linha em outra tabela, é isso? Por que da forma que você está fazendo, você está comparando sempre com o mesmo registro em ftd001datcan, Por isso está colorindo toda a coluna, pois a verificação sempre cai na mesma condição.
GOSTEI 0
Wilton Júnior
19/08/2013
Joel não sei mais nada, agora parece que deu certo.
Tem momentos que clico na coluna e fica amarelo.
Testei com aqueles que estao com datcan >0 e funcionou ficou em vermelho.
Tem momentos que clico na coluna e fica amarelo.
Testei com aqueles que estao com datcan >0 e funcionou ficou em vermelho.
GOSTEI 0
Wilton Júnior
19/08/2013
Os que deveriam aparecer em amarelo nao aparece mas o que tem que aparecer em vermelho sim
GOSTEI 0
Wilton Júnior
19/08/2013
Consegui fzer dar certo no final tiver que incluir a coluna do temmdf e deixa invisivel na hora de comprar ela no envento customdrawcell eu fiz assim:
if (AViewInfo.Item.Index = cxGrid5DBTableView1Column1.Index)then
begin
if (AViewInfo.GridRecord.Values[cxGrid5DBTableView1Column19.Index] > 0) then //ftd001datcan.value > 0
ACanvas.Brush.Color := clred
else if (AViewInfo.GridRecord.Values[cxGrid5DBTableView1Column20.Index] = 1) then //ftd001temmdf.value = 1
ACanvas.Brush.Color := clYellow
else
ACanvas.Brush.Color := clbtnface;
ACanvas.Font.Color := clwindowtext;
ACanvas.FillRect(AViewInfo.Bounds);
end;
if (AViewInfo.Item.Index = cxGrid5DBTableView1Column1.Index)then
begin
if (AViewInfo.GridRecord.Values[cxGrid5DBTableView1Column19.Index] > 0) then //ftd001datcan.value > 0
ACanvas.Brush.Color := clred
else if (AViewInfo.GridRecord.Values[cxGrid5DBTableView1Column20.Index] = 1) then //ftd001temmdf.value = 1
ACanvas.Brush.Color := clYellow
else
ACanvas.Brush.Color := clbtnface;
ACanvas.Font.Color := clwindowtext;
ACanvas.FillRect(AViewInfo.Bounds);
end;
GOSTEI 0
Joel Rodrigues
19/08/2013
Ah, saquei a solução. Bom, pelo menos deu certo, é o que importa (ao menos inicialmente).
Neste caso, estou concluindo o tópico.
Abraço a todos.
Neste caso, estou concluindo o tópico.
Abraço a todos.
GOSTEI 0