A função é a seguinte retirada do dtdelphi, desculpem pelo espaçamento

Idade
// Programador - Paulo Alexsandro Freitas de Miranda <- The Programmer ->
// [EMAIL PROTECTED]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Mask;

type
  TForm1 = class(TForm)
  meNasc: TMaskEdit;
  Label1: TLabel;
  SpeedButton1: TSpeedButton;
  edIdade: TEdit;
  Label2: TLabel;
  BitBtn1: TBitBtn;
  Label3: TLabel;
  edDias: TEdit;
  function Bissexto(AYear: Integer): Boolean;
  function DiasDoMes(AYear, AMonth: Integer): Integer;
  function Idade2(DataNasc : TDate) : String;
  function Dias(Data : TDate) : String;
  function Idade(Nasc : TDate) : String;
  procedure SpeedButton1Click(Sender: TObject);
  procedure meNascKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.Bissexto(AYear: Integer): Boolean;
begin
  Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0));
end;

function TForm1.DiasDoMes(AYear, AMonth: Integer): Integer;
const
  DaysInMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 
31, 30, 31);
begin
  Result := DaysInMonth[AMonth];
  if (AMonth = 2) and Bissexto(AYear) then Inc(Result);
end;


function TForm1.Idade2(DataNasc : TDate) : String;
Var Ano1, Mes1, Dia1 : Word;
  Ano2, Mes2, Dia2 : Word;
  Ano, Mes, Dia : Word;
  Idade : String;
  AuxDia1, AuxDia2 : Integer;
begin
  Idade := '';
  DecodeDate(DataNasc, Ano1, Mes1, Dia1);
  DecodeDate(Date, Ano2, Mes2, Dia2);
  AuxDia1 := Dia1;
  AuxDia2 := Dia2;
  if (Dia1 > Dia2) And ((Mes2 - Mes1) = 1) then begin
  Dia2 := Dia2 + DiasDoMes(Ano1, Mes1);
  Mes1 := Mes2;
  end else if (Dia1 > Dia2) And (Mes1 <> Mes2) then begin
  Dia2 := Dia2 + DiasDoMes(Ano1, Mes1);
  end else if (Mes1 = Mes2) And (Dia1 > Dia2) And (Ano1 <> Ano2) then begin
  Dia2 := Dia2 + DiasDoMes(Ano1, Mes1);
  Mes2 := Mes2 + 11;
  Ano1 := Ano1 + 1;
  end;

  if (Mes1 > Mes2) And (AuxDia1 <= AuxDia2) then begin
  Ano1 := Ano1 + 1;
  Mes2 := Mes2 + 12;
  end else if (Mes1 > Mes2) And (AuxDia1 > AuxDia2) then begin
  Ano1 := Ano1 + 1;
  Mes2 := Mes2 + 11;
  end;

  Ano := Ano2 - Ano1;
  Mes := Mes2 - Mes1;
  Dia := Dia2 - Dia1;
  if Ano > 1 then
  Idade := IntToStr(Ano) + ' Anos'
  else if Ano = 1 then
  Idade := IntToStr(Ano) + ' Ano';

  if Mes > 1 then
  Idade := Idade + ', ' + IntToStr(Mes) + ' Meses '
  else if Mes <> 0 then
  Idade := Idade + ', ' + IntToStr(Mes) + ' Mês ';

  If Ano = 0 then
  Delete(Idade, 1, 1);

  if Dia > 1 then
  Idade := Idade + ' e ' + IntToStr(Dia) + ' Dias'
  else if Dia <> 0 then
  Idade := Idade + ' e ' + IntToStr(Dia) + ' Dia';

  if (Mes = 0) And (Ano = 0) then
  Delete(Idade, 1, 3);

  if (Ano1 = Ano2) And (Mes1 = Mes2) And (Dia1 > Dia2) then
  Idade := '0';

  Result := Idade;
end;


function TForm1.Dias(Data : TDate) : String;
begin
  Result := FloatToStr(Date - Data);
end;

function TForm1.Idade(Nasc : TDate) : String;
Var AuxIdade, Meses, IdadeReal : String;
  MesesFloat : Real;
  IdadeInc : Integer;
begin
  AuxIdade := Format('%0.2f', [(Date - Nasc) / 365.6]);
  Meses := FloatToStr(Frac(StrToFloat(AuxIdade)));

  if AuxIdade = '0' then begin
  Result := '0,0';
  Exit;
  end;

  if Meses[1] = '-' then
  Meses := FloatToStr(StrToFloat(Meses) * -1);

  Delete(Meses, 1, 2);

  if Length(Meses) = 1 then
  Meses := Meses + '0';

  if (Meses <> '0') And (Meses <> '') then
  MesesFloat := Round(((365.6 * StrToInt(Meses)) / 100) / 30)
  else
  MesesFloat := 0;

  if MesesFloat <> 12 then
  IdadeReal := IntToStr(Trunc(StrToFloat(AuxIdade))) + ',' + 
FloatToStr(MesesFloat)
  else begin
  IdadeInc := Trunc(StrToFloat(AuxIdade));
  Inc(IdadeInc);
  IdadeReal := IntToStr(IdadeInc) + ',' + '0';
  end;

  Result := IdadeReal;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  edDias.Text := Dias(StrToDate(meNasc.Text));
  edIdade.Text := Idade2(StrToDate(meNasc.Text));
end;

procedure TForm1.meNascKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then begin
  SpeedButton1.Click;
  Key := 0;
  end;
end;

end.


From: Marcelo Mendes de Oliveira 
Sent: Tuesday, December 11, 2007 12:52 PM
To: delphi-br@yahoogrupos.com.br 
Subject: RES: [delphi-br] Ajuda!! lógica Calculo 


Amigo faça o seguinte eu fiz este ezxemplo com um edit mas vc pode adaptar
para sua necessidade

Var data1 : integer;

Data2 : Tdate;

Data2 := StrToDate(edit1.Text);

Data1:= trunc((Date - data2)/365.25);

showmessage('sua data de nacimento é ' + inttostr(Data1));

Marcelo Mendes de Oliveira 
Analista de Informática
Tel.: + 49 3541-6177
Fax: + 49 3541-0423
IGUAÇU - celulose, papel s.a
www.iguacucelulose.com.br <http://www.iguacucelulose.com.br/> 
P Antes de imprimir pense em sua responsabilidade e compromisso com o MEIO
AMBIENTE!
Before printing this document, think about your responsibility and care for
the ENVIRONMENT!

_____ 

De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de itasouza
Enviada em: terça-feira, 11 de dezembro de 2007 12:39
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] Ajuda!! lógica Calculo 

Tenho um campo DBedit que recebera a data de nascimento, o mesmo está 
com uma maskara no EditMask, preciso calcular a idade e jogar o valor 
em um outro DBedit.

EditDataNascimento // recebe a data no formato 00/00/0000
EditIdade // calcula a idade.

Alguém poderia ajudar..

Agradeço...

[As partes desta mensagem que não continham texto foram removidas]



 

[As partes desta mensagem que não continham texto foram removidas]

Responder a