ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Calculando idade no delphi ! [resolvido!]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
leo1994
Aprendiz
Aprendiz


Registrado: Domingo, 23 de Janeiro de 2011
Mensagens: 159
Localização: Ourinhos, SP

MensagemEnviada: Qui Mar 24, 2011 6:38 pm    Assunto: Calculando idade no delphi ! [resolvido!] Responder com Citação

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.? Very Happy


Editado pela última vez por leo1994 em Sex Mar 25, 2011 9:48 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Mar 24, 2011 6:50 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo1994
Aprendiz
Aprendiz


Registrado: Domingo, 23 de Janeiro de 2011
Mensagens: 159
Localização: Ourinhos, SP

MensagemEnviada: Qui Mar 24, 2011 11:37 pm    Assunto: Responder com Citação

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 ? Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Mar 25, 2011 12:39 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo1994
Aprendiz
Aprendiz


Registrado: Domingo, 23 de Janeiro de 2011
Mensagens: 159
Localização: Ourinhos, SP

MensagemEnviada: Sex Mar 25, 2011 12:45 am    Assunto: Responder com Citação

E como eu faço pra colocar a idade q a função irá retornar, em um edit?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Sex Mar 25, 2011 9:21 am    Assunto: Responder com Citação

é só vc passar no text
Código:

Edit1.Text := IntToStr(ObterIdade(Data1; Data2))+' Idade';
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
leo1994
Aprendiz
Aprendiz


Registrado: Domingo, 23 de Janeiro de 2011
Mensagens: 159
Localização: Ourinhos, SP

MensagemEnviada: Sex Mar 25, 2011 9:47 am    Assunto: Responder com Citação

valeu pessoal, agora eu intendi ......
Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB