Programando Timer Delphi 7 Por Favor me ajudem !!
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.
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
Curtidas 0
Respostas
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
[].s
GOSTEI 0
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
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
17/07/2012
Eliel Boa tarde !
Eu fiz esse esquema e deu erro is not a valid date and time ...
Eu fiz esse esquema e deu erro is not a valid date and time ...
GOSTEI 0
Watson Rocha
17/07/2012
alguem sabe pq ?
GOSTEI 0
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
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
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
17/07/2012
Pessoal Continuo aguardando uma resposta , alguem pode me ajudar ?
GOSTEI 0