Fórum Ajuda nos comandos if e elser #444536
02/06/2013
0
procedure TFRAtendimento.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if IBTable5.FieldByName ('STATUS').Value='FINALIZADA' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clRed;
end else
begin
if IBTable5.FieldByName ('STATUS').Value='AGUARDANDO RETORNO' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clBlue;
end else
begin
if IBTable5.FieldByName ('STATUS').Value='EM ANDAMENTO' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clGreen;
end else
begin
if IBTable5.FieldByName ('STATUS').Value='RETORNAR' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clpurple;
end;
end;
end;
end;
DBGrid1.DefaultDrawDataCell(Rect, Column.field, State);
end;
Felipe Arruda
Curtir tópico
+ 0Posts
02/06/2013
Demian Soares
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clRed;
end
else if IBTable5.FieldByName ('STATUS').Value='AGUARDANDO RETORNO' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clBlue;
end
else if IBTable5.FieldByName ('STATUS').Value='EM ANDAMENTO' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clGreen;
end
else if IBTable5.FieldByName ('STATUS').Value='RETORNAR' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clpurple;
end;
Gostei + 0
02/06/2013
Felipe Arruda
Obrigado.
Att, Felipe.
Gostei + 0
02/06/2013
Alan Souza
DBGrid1.DefaultDrawDataCell(Rect, Column.field, State);
caso interesse, segue meu teste (baseado no DBDEMOS):
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table1LAST_NAME.AsString='Davis' then begin DBGrid1.Canvas.Brush.Color:=clMenu; DbGrid1.Canvas.Font.Color := clRed; end else if Table1LAST_NAME.AsString='Jones' then begin DBGrid1.Canvas.Brush.Color:=clMenu; DbGrid1.Canvas.Font.Color := clBlue; end else if Table1LAST_NAME.AsString='Parker' then begin DBGrid1.Canvas.Brush.Color:=clMenu; DbGrid1.Canvas.Font.Color := clGreen; end else if Table1LAST_NAME.AsString='Sawyer' then begin DBGrid1.Canvas.Brush.Color:=clMenu; DbGrid1.Canvas.Font.Color := clpurple; end; DBGrid1.DefaultDrawDataCell(Rect, Column.field, State); end;
Gostei + 0
03/06/2013
Felipe Arruda
procedure TFRAtendimento.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if IBTable5.FieldByName ('STATUS').Value='FINALIZADA' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clRed;
end
else if IBTable5.FieldByName ('STATUS').Value='AGUARDANDO RETORNO' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clBlue;
end
else if IBTable5.FieldByName ('STATUS').Value='EM ANDAMENTO' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clGreen;
end
else if IBTable5.FieldByName ('STATUS').Value='RETORNAR' then
begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clpurple;
end;
DBGrid1.DefaultDrawDataCell(Rect, Column.field, State);
end;
Gostei + 0
03/06/2013
Guilherme Wiethaus
Seguinte você também esqueceu de colocar o método Fillrect() que informa a área que se deseja colorir. Quando o evento é disparado, o Rect possui os dados da região (Coordenadas) que se aplica. Pode-se alterar esta região restringindo ou ampliando ela.
Outra coisa errada que constatei é que ao invéz de usar DefaultDrawColumnCell() está se usando DefaultDrawDataCell()
procedure TFRAtendimento.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if IBTable5.FieldByName ('STATUS').Value='FINALIZADA' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clRed;
end else if IBTable5.FieldByName ('STATUS').Value='AGUARDANDO RETORNO' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clBlue;
end else if IBTable5.FieldByName ('STATUS').Value='EM ANDAMENTO' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clGreen;
end else if IBTable5.FieldByName ('STATUS').Value='RETORNAR' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clpurple;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
O código acima é mais apropriado para colorir colunas ou uma célula em especifico, o mais adequado seria colorir a linha de acordo com o status que deseja do registro, então o melhor seria colocar seu código no evento OnDrawDataCell()
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if IBTable5.FieldByName ('STATUS').Value='FINALIZADA' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clRed;
end else if IBTable5.FieldByName ('STATUS').Value='AGUARDANDO RETORNO' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clBlue;
end else if IBTable5.FieldByName ('STATUS').Value='EM ANDAMENTO' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clGreen;
end else if IBTable5.FieldByName ('STATUS').Value='RETORNAR' then begin
DBGrid1.Canvas.Brush.Color:=clMenu;
DbGrid1.Canvas.Font.Color := clpurple;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
Abraços
Gostei + 0
03/06/2013
Alan Souza
e eu só citei o DBDEMOS por que usei as tabelas do BDE para não ter que criar um banco, era para adaptar para as suas necessidades.
Gostei + 0
03/06/2013
Felipe Arruda
Obrigado.
Gostei + 0
03/06/2013
Guilherme Wiethaus
Gostei + 0
03/06/2013
Felipe Arruda
Desde ja fico agradecio. Obrigado.
Gostei + 0
03/06/2013
Guilherme Wiethaus
Só não consigo ver porque tens tanto problema assim. Eu mesmo já fiz isto em outra época e funcionou bem. Posso inclusive fazer um exemplo e te enviar. Mas tenha paciência, pois nos minha agenda há algumas tarefas a serem feitas antes.
:-)
Abraços.
Gostei + 0
03/06/2013
Demian Soares
Gostei + 0
03/06/2013
Felipe Arruda
Obrigado, novamente
Gostei + 0
03/06/2013
Alan Souza
Gostei + 0
03/06/2013
Felipe Arruda
Gostei + 0
04/06/2013
Claudia Nogueira
Por curiosidade eu testei aqui, e fiz igual você fala e não ocorreu o problema.
O que pode ser, é algum código estar em algum evento do seu DBGrid, como onEnter, onKeyUp, onKeyDown, ou ainda em algum evento do DataSet, como o onAfterScroll que atrapalhe a situação, e por nisso em nossos projetos o erro não ocorre.
Se for a situação acima que está causando o problema, nós não vamos conseguir identificar o problema sem ter acesso a esse seu Form
Eu fiz aqui assim:
if DBGrid1.DataSource.DataSet.FieldByName('STATUS').Value = 'FINALIZADA' then
begin
DBGrid1.Canvas.Brush.Color := clMenu;
DbGrid1.Canvas.Font.Color := clRed;
end
else
if DBGrid1.DataSource.DataSet.FieldByName('STATUS').Value = 'AGUARDANDO RETORNO' then
begin
DBGrid1.Canvas.Brush.Color := clMenu;
DbGrid1.Canvas.Font.Color := clBlue;
end
else
if DBGrid1.DataSource.DataSet.FieldByName('STATUS').Value = 'EM ANDAMENTO' then
begin
DBGrid1.Canvas.Brush.Color := clMenu;
DbGrid1.Canvas.Font.Color := clGreen;
end
else
if DBGrid1.DataSource.DataSet.FieldByName('STATUS').Value = 'RETORNAR' then
begin
DBGrid1.Canvas.Brush.Color := clMenu;
DbGrid1.Canvas.Font.Color := clpurple;
end;
DBGrid1.DefaultDrawDataCell(Rect, Column.field, State);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)