|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
leo1994 Aprendiz
Registrado: Domingo, 23 de Janeiro de 2011 Mensagens: 159 Localização: Ourinhos, SP
|
Enviada: Qui Mar 24, 2011 6:38 pm Assunto: Calculando idade no delphi ! [resolvido!] |
|
|
Eu estou fazendo um sistema em que ao colocar a data de nascimento no DateTimePicker, o edit receberá a idade da pessoa. Mas ao colocar a data de nascimento e subitrai-la pela data do windows, ele retorna a idade, mas por exemplo: se você faz aniversário em dezembro e nasceu em 1994, ele mostra 17 anos de idade, mas a pessoa tem 16, pois estamos em março.
quero que mostre no edit, a idade atual da pessoa.
olhem o meu código:
Código: |
procedure Tfrmcadastrocliente.DateTimePicker1Change(Sender: TObject);
var
anos: real;
begin
anos:= now-DateTimePicker1.Date;
edit1.Text:= formatfloat('##',(anos/365));
end;
|
O que eu faço para mostrar a idade atual da pessoa.?
Editado pela última vez por leo1994 em Sex Mar 25, 2011 9:48 am, num total de 1 vez |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Mar 24, 2011 6:50 pm Assunto: |
|
|
Vou colocar uma sugestão de função para calculo de idade que você pode adicionar ao seu form ou a alguma unit com funções genéricas (caso exista alguma no seu projeto):
Código: | function Tfrmcadastrocliente.ObterIdade(DataNasc: TDateTime; DataAtual: TDateTime): integer;
var
DiaNasc: word;
MesNasc: word;
AnoNasc: word;
DiaAtual: word;
MesAtual: word;
AnoAtual: word;
begin
if DataAtual > DataNasc then
begin
DecodeDate(DataNasc, AnoNasc, MesNasc, DiaNasc);
DecodeDate(DataAtual, AnoAtual, MesAtual, DiaAtual);
if (MesAtual > MesNasc) or
((MesAtual = MesNasc) and
(DiaAtual >= DiaNasc)) then
Result := AnoAtual - AnoNasc
else
Result := AnoAtual - AnoNasc - 1;
end
else
Result := 0;
end; |
Depois para utilizar a função:
Código: | procedure Tfrmcadastrocliente.DateTimePicker1Change(Sender: TObject);
begin
edit1.Text:= IntToStr(ObterIdade(DateTimePicker1.Date, Date));
end; |
Espero que seja útil.
_________________
Assinatura: Imóveis a venda em Suzano |
|
Voltar ao Topo |
|
|
leo1994 Aprendiz
Registrado: Domingo, 23 de Janeiro de 2011 Mensagens: 159 Localização: Ourinhos, SP
|
Enviada: Qui Mar 24, 2011 11:37 pm Assunto: |
|
|
imex escreveu: | Vou colocar uma sugestão de função para calculo de idade que você pode adicionar ao seu form ou a alguma unit com funções genéricas (caso exista alguma no seu projeto):
Código: | function Tfrmcadastrocliente.ObterIdade(DataNasc: TDateTime; DataAtual: TDateTime): integer;
var
DiaNasc: word;
MesNasc: word;
AnoNasc: word;
DiaAtual: word;
MesAtual: word;
AnoAtual: word;
begin
if DataAtual > DataNasc then
begin
DecodeDate(DataNasc, AnoNasc, MesNasc, DiaNasc);
DecodeDate(DataAtual, AnoAtual, MesAtual, DiaAtual);
if (MesAtual > MesNasc) or
((MesAtual = MesNasc) and
(DiaAtual >= DiaNasc)) then
Result := AnoAtual - AnoNasc
else
Result := AnoAtual - AnoNasc - 1;
end
else
Result := 0;
end; |
Depois para utilizar a função:
Código: | procedure Tfrmcadastrocliente.DateTimePicker1Change(Sender: TObject);
begin
edit1.Text:= IntToStr(ObterIdade(DateTimePicker1.Date, Date));
end; |
Espero que seja útil.
_________________
Assinatura: Imóveis a venda em Suzano |
Você poderia explicar o código ? |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Mar 25, 2011 12:39 am Assunto: |
|
|
A função que postei recebe duas datas como parâmetros (data de nascimento e data atual) e retorna a idade em um tipo integer.
Se a data atual for maior que a data de nascimento calcula a idade, senão retorna 0.
Para calcular a idade é utilizada a função DecodeDate que recebe a data no formato TDateTime e separa o ano, mes e dia (nesta ordem) em 3 variáveis do tipo word.
Então supondo que a data de nascimento seja 20 de dezembro de 1994, e a data atual seja 25 de março de 2011, após executar a função DecodeDate as variáveis terão os seguintes valores:
- DiaNasc = 20
- MesNasc = 12
- AnoNasc = 1994
- DiaAtual = 25
- MesAtual = 3
- AnoAtual = 2011
Como neste caso o mes atual é menor que o mes de nascimento, o retorno da função (variável Result) é igual a 16 (2011 - 1994 - 1).
Se a data de nascimento fosse 20 de fevereiro de 1994, o mes atual seria maior que o mes de nascimento e o retorno da função seria igual a 17 (2011 - 1994).
Espero que ajude. |
|
Voltar ao Topo |
|
|
leo1994 Aprendiz
Registrado: Domingo, 23 de Janeiro de 2011 Mensagens: 159 Localização: Ourinhos, SP
|
Enviada: Sex Mar 25, 2011 12:45 am Assunto: |
|
|
E como eu faço pra colocar a idade q a função irá retornar, em um edit? |
|
Voltar ao Topo |
|
|
rafmattos Colaborador
Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Sex Mar 25, 2011 9:21 am Assunto: |
|
|
é só vc passar no text
Código: |
Edit1.Text := IntToStr(ObterIdade(Data1; Data2))+' Idade';
|
|
|
Voltar ao Topo |
|
|
leo1994 Aprendiz
Registrado: Domingo, 23 de Janeiro de 2011 Mensagens: 159 Localização: Ourinhos, SP
|
Enviada: Sex Mar 25, 2011 9:47 am Assunto: |
|
|
valeu pessoal, agora eu intendi ......
|
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|