Fórum Linha com cor dirente no DBGRID #291911
16/08/2005
0
var a:real; begin a:= date - BD_CONT_RECGS_COR_DATA_VENC.AsDateTime; if a > 0 then BD_CONT_RECGS_COR_DATRASO.Value := date - BD_CONT_RECGS_COR_DATA_VENC.AsDateTime; end;
sendo que o campo ´ BD_CONT_RECGS_COR_DATRASO ´ é um campo tempórário só exite quando o form é ativado somente para receber os valores referentes aos atrasos...
a pergunta... exite uma forma de colorir em amarelo os atrasados até 30 dias e os que tiverem um valor acima de 30 dias ficer em vermelho ?
Valew...t+
Gigatel
Curtir tópico
+ 0Posts
16/08/2005
Massuda
procedure TSeuForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Grid: TDBGrid; Atraso: Integer; begin Grid := Sender as TDBGrid; // ajusta as cores Atraso := ...calcule o total de dias em atraso...; if Atraso > 0 then begin if Atraso <= 30 then begin Grid.Canvas.Font.Color :=clBlack; Grid.Canvas.Brush.Color :=clYellow; end else begin Grid.Canvas.Font.Color :=clYellow; Grid.Canvas.Brush.Color :=clRed; end; end; // usa a rotina padrão de desenho Grid.DefaultDrawDataCell(rect,Column.Field,State); end;
Gostei + 0
16/08/2005
Gigatel
procedure TSeuForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Grid: TDBGrid; Atraso: Integer; begin Grid := Sender as TDBGrid; // ajusta as cores Atraso := ...calcule o total de dias em atraso...; if Atraso > 0 then begin if Atraso <= 30 then begin Grid.Canvas.Font.Color :=clBlack; Grid.Canvas.Brush.Color :=clYellow; end else begin Grid.Canvas.Font.Color :=clYellow; Grid.Canvas.Brush.Color :=clRed; end; end; // usa a rotina padrão de desenho Grid.DefaultDrawDataCell(rect,Column.Field,State); end;
o que entraria aki ?
// ajusta as cores Atraso := ...calcule o total de dias em atraso...;
Gostei + 0
16/08/2005
Massuda
Gostei + 0
16/08/2005
Gigatel
procedure T_FormCRReceb.BD_CONT_RECCalcFields(DataSet: TDataSet); var a:real; begin a:= date - BD_CONT_RECGS_COR_DATA_VENC.AsDateTime; if a > 0 then BD_CONT_RECGS_COR_DATRASO.Value := date - BD_CONT_RECGS_COR_DATA_VENC.AsDateTime; end;
Tá dando erro...este campo
.....BD_CONT_RECGS_COR_DATA_VENC.... e do tipo Varchar e aí fiz o seguinte..
var Grid: TDBGrid; Atraso: Integer; begin Grid := Sender as TDBGrid; // ajusta as cores Atraso := StrToInt(BD_CONT_RECGS_COR_DATA_VENC.value); if Atraso > 0 then begin if Atraso <= 30 then begin Grid.Canvas.Font.Color :=clBlack; Grid.Canvas.Brush.Color :=clYellow; end else begin Grid.Canvas.Font.Color :=clYellow; Grid.Canvas.Brush.Color :=clRed; end; end;
más dá o seguinte erro....
ECOVERTE ERROR ...21/08/2005 não é um valor inteiro válido...será que tem algo a ver com conversão......
Gostei + 0
16/08/2005
Massuda
Como você tem esse campo com os dias em atraso, o código fica mais simples...
procedure T_FormCRReceb.BD_CONT_RECCalcFields(DataSet: TDataSet); var Atraso: Double; begin Atraso:= Date - BD_CONT_RECGS_COR_DATA_VENC.AsDate; if Atraso > 0 then BD_CONT_RECGS_COR_DATRASO.AsDouble := Atraso; else BD_CONT_RECGS_COR_DATRASO.AsDouble := 0; end; ... var Grid: TDBGrid; Atraso: Integer; begin Grid := Sender as TDBGrid; // ajusta as cores Atraso := BD_CONT_RECGS_COR_DATA_VENC.AsInteger; if Atraso > 0 then begin if Atraso <= 30 then begin Grid.Canvas.Font.Color :=clBlack; Grid.Canvas.Brush.Color :=clYellow; end else begin Grid.Canvas.Font.Color :=clYellow; Grid.Canvas.Brush.Color :=clRed; end; end; ...
Gostei + 0
16/08/2005
Gigatel
Como você tem esse campo com os dias em atraso, o código fica mais simples...
procedure T_FormCRReceb.BD_CONT_RECCalcFields(DataSet: TDataSet); var Atraso: Double; begin Atraso:= Date - BD_CONT_RECGS_COR_DATA_VENC.AsDate; if Atraso > 0 then BD_CONT_RECGS_COR_DATRASO.AsDouble := Atraso; else BD_CONT_RECGS_COR_DATRASO.AsDouble := 0; end; ... var Grid: TDBGrid; Atraso: Integer; begin Grid := Sender as TDBGrid; // ajusta as cores Atraso := BD_CONT_RECGS_COR_DATA_VENC.AsInteger; if Atraso > 0 then begin if Atraso <= 30 then begin Grid.Canvas.Font.Color :=clBlack; Grid.Canvas.Brush.Color :=clYellow; end else begin Grid.Canvas.Font.Color :=clYellow; Grid.Canvas.Brush.Color :=clRed; end; end; ...
quando copila..
[Error] Unit18.pas(868): Undeclared identifier: ´AsDate´
......
[Error] Unit18.pas(870): Undeclared identifier: ´AsDouble´..
será que tenho que declarar alguma coisa ?
Gostei + 0
16/08/2005
Massuda
Gostei + 0
16/08/2005
Gigatel
Agora funcionol...
más Dá erro ... 28/08/2005 não é um valor inteiro....os campos que tenho..o calculado é INTEGER....O que recebe a data é VCHAR....
BD_CONT_RECGS_COR_DATA_VENC é um campo VChar
BD_CONT_RECGS_COR_DATRASO é um campo Integer..
Tá brabo,....
Gostei + 0
16/08/2005
Gigatel
procedure T_FormCRReceb.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if BD_CONT_REC.FieldByName (´GS_COR_DATRASO´).Value > 0 then begin if BD_CONT_REC.FieldByName (´GS_COR_DATRASO´).Value <= 30 then begin DbGrid1.Canvas.Font.Color :=clBlack; DbGrid1.Canvas.Brush.Color :=clYellow; end else begin DbGrid1.Canvas.Font.Color :=clYellow; DbGrid1.Canvas.Brush.Color :=clRed; end; // DbGrid1.Canvas.Font.Color := clRed; //DbGrid1.Canvas.Font.Style := [fsBold]; end; dbGrid1.DefaultDrawDataCell(rect,Column.Field,State); end; end.
Deu Certo é ficou muito bom o efeito...Vlw..Muito Obrigado..
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)