Programando Timer Delphi 7 Por Favor me ajudem !!

Delphi

17/07/2012

Pessoal eu nunca vi isso , mas queria uma luz !
Estou desenvolvendo um programa de cadastro de funcionario terceiro.
Eu queria que no DBGRID ficasse em vermelho, quando a data da integração do funcionario vencesse .
Eu pensei em algo assim ,programar algo no componente TIMER.

Exemplo mais claro !

Cadastrei um funcionario hoje a integração dele na empresa é valida por 30 dias , chegando nessa data de vencimento automaticamente no DBGRID mudasse a cor para vermelho.

Sei que existe algo parecido com isso, mas nem imagino como faz.
Alguém pode me ajudar ..

Desde ja Muito Obrigado.
Watson Rocha

Watson Rocha

Curtidas 0

Respostas

Anderson Rodrigues

Anderson Rodrigues

17/07/2012

Ola, vc vai ter que programar no evento OnDrawColumnCell do DBGrid, através deste vc pode mudar a cor de uma célula ou de toda a linha do form. Não tenho nenhum exemplo aqui no momento, mas procure na net Zebrar DBGrid, seguem os mesmos padrões, ou se preferir tem um curso de DBGrid que mostra como fazer exatamente isso que você que, é Free.

[].s
GOSTEI 0
Eliel Martins

Eliel Martins

17/07/2012

Olá Watson !

Conforme foi relatado abaixo, você deve utilizar o evento OnDrawColumn, estou colocando abaixo um exemplo de um código que fiz para um gerenciamento de contas a pagar.


procedure TFrmGerenciador_Contas_Pagar.Grid_Gen_PagarDrawColumnCell(
Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
{Situação Lançamento}
if Column.Field = Cds_Gen_PagarCPG_IMG then begin
Grid_Gen_Pagar.Canvas.FillRect(Rect);
Grid_Gen_Pagar.DefaultDrawDataCell(Rect,Column.Field,State);
if (Cds_Gen_Pagar.FieldByName(CPG_VENCIMENTO).AsDateTime > Date) and
(Cds_Gen_Pagar.FieldByName(CPG_VALOR_PAGO).AsFloat = 0) then begin
cxImg.Draw(Grid_Gen_Pagar.Canvas,rect.Left + 6,rect.top,0);
end else if (Cds_Gen_Pagar.FieldByName(CPG_VENCIMENTO).AsDateTime < Date) and
(Cds_Gen_Pagar.FieldByName(CPG_VALOR_PAGO).AsFloat = 0) then begin
cxImg.Draw(Grid_Gen_Pagar.Canvas,rect.Left + 6,rect.top,2);
end else if (Cds_Gen_Pagar.FieldByName(CPG_VENCIMENTO).AsDateTime = Date) and
(Cds_Gen_Pagar.FieldByName(CPG_VALOR_PAGO).AsFloat = 0) then begin
cxImg.Draw(Grid_Gen_Pagar.Canvas,rect.Left + 6,rect.top,10);
end else if Cds_Gen_Pagar.FieldByName(CPG_VALOR_PAGO).AsInteger > 0 then begin
cxImg.Draw(Grid_Gen_Pagar.Canvas,rect.Left + 6,rect.top,7);
end else begin
cxImg.Draw(Grid_Gen_Pagar.Canvas,rect.Left + 6,rect.top,11);
end;
end;
end;


Espero ter ajudado.

Atenciosamente,

Eliel G. Martins
GOSTEI 0
Watson Rocha

Watson Rocha

17/07/2012

Eliel Boa tarde !

Eu fiz esse esquema e deu erro is not a valid date and time ...
GOSTEI 0
Watson Rocha

Watson Rocha

17/07/2012

alguem sabe pq ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/07/2012

Aparentemente algum registro está vindo com o campo CPG_VENCIMENTO em branco ou com um valor inválido. Verifique isso.
GOSTEI 0
Watson Rocha

Watson Rocha

17/07/2012

Pessoal estou conseguindo resolver esse problema ,
eu coloquei um DBcombobox e dois itens nele , BLOQUEADO E DESBLOQUEADO .

Eu queria que no DBGRID quando for selecionado BLOQUEADO a linha inteira ficasse vermelha e quando voltasse para DESBLOQUADO ficasse preto ...

Alguem pode me dar uma luz !!

minha tabela é sesmt e o campo que irá receber essas informações no banco é STATUS.

Obrigado
GOSTEI 0
Watson Rocha

Watson Rocha

17/07/2012

Pessoal Continuo aguardando uma resposta , alguem pode me ajudar ?
GOSTEI 0
POSTAR