GARANTIR DESCONTO

Fórum Evento onchange do DataTimePicker - Dephi 2007 #354845

05/03/2008

0

Estou querendo colocar num Edit a idade de uma pessoa, cuja data de nascimento é colocada num DataTimePicker.
Faço isso no evento onchange do dtp usando a função YearsBetween.
Eu entrando com a data, manualmente, no dtp, o evento dispara normalmente.
Agora, se eu atribuir a data automaticamente, por exemplo clicando num botão, o evento não é disparado.

É algum bug do Delphi ou algum erro meu? (uso Delphi 2007)

Código de exemplo:

DataTimePicker.Date := now;

Evento onChange do dtp:
Edit.Text := IntToStr(YearsBetween(now, DataTimePicker.Date));

Evento onClick do botão:
DataTimePicker.Date := StrToDate(´01/01/1980´);


Rmarcelop

Rmarcelop

Responder

Posts

05/03/2008

Emarcolongo

boa tarde,
eu não sei se isto é bug do d2007, pois não o instalei para testar,
mas o que vc pode fazer é disparar manualmente o evento onchange

logo depois de :


Evento onClick do botão:
DataTimePicker.Date := StrToDate(´01/01/1980´);

coloque
DataTimePicker.OnChange(nil);

Espero te ajudado.


Responder

Gostei + 0

05/03/2008

Rmarcelop

Beleza, funcionou perfeitamente.

Porém, não era para isso ser feito automaticamente? Havendo uma mudança no dtp, o evento não teria de ser disparado?


Responder

Gostei + 0

05/03/2008

Onjahyr

Aparentemente pode estar certo, mas poderia melhorar....
Estou sem o Delphi aqui, mas vc poderia não usar o onChange e fazer direto?

// Prá que esse exemplo abaixo? Código de exemplo: DataTimePicker.Date := now; Evento onChange do dtp: Edit.Text := IntToStr(YearsBetween(now, DataTimePicker.Date)); Evento onClick do botão: DataTimePicker.Date := StrToDate(´01/01/1980´);



Por quê não assim, direto:

// Sem precisar o evento onChange

DataTimePicker.Date := StrToDate(´01/01/1980´);
Edit.Text := IntToStr(YearsBetween(now, DataTimePicker.Date)); 



Responder

Gostei + 0

05/03/2008

Rmarcelop

// Sem precisar o evento onChange DataTimePicker.Date := StrToDate(´01/01/1980´); Edit.Text := IntToStr(YearsBetween(now, DataTimePicker.Date));


Na verdade estou fazendo um formulário de cadastro padrão, com as opções de incluir, alterar e excluir.

Quando a opção é ´incluir´, eu inicio o dtp com a data atual, e a idade será mostrada no edit assim que o usuario entrar com a data de nascimento.

Quando a opção é ´alterar´ ou ´excluir´, eu inicio o dtp com a data armazenada no banco.

Por isso uso o evento onchange. Serviria para qualquer opção, porém como disse acima, na opção ´incluir´, onde a data é digitada no dtp, o evento ocorre normalmente, mas se a opção for ´alterar´ ou ´excluir´, onde a data vem do banco, o evento não dispara. Para funcionar, tive que usar a dica do amigo emarcolongo, após o comando:

DateTimePicker.Date := CampoDATA.AsDateTime;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar