Class and Recorder Helper example

Top 

Example code : How old are you?

{YearsBetween function}

function SpanOfNowAndThen(const ANow, AThen: Float): Float;

begin

  if ANow < AThen then

    Result := AThen - ANow

  else

    Result := ANow - AThen;

end;

 

function DaySpan(const ANow, AThen: Float): Float;

begin

  Result := SpanOfNowAndThen(ANow, AThen);

end;

 

function YearSpan(const ANow, AThen: Float): Float;

begin

  Result := DaySpan(ANow, AThen) / 365.25;

end;

 

function YearsBetween(const ANow, AThen: Float): Integer;

begin

  Result := Trunc(YearSpan(ANow, AThen));

end;

 

{ TPessoa class }

 

type

  TPessoa = class

  private

    FDataNasc: TDateTime;

  public

    property DataNasc: TDateTime read FDataNasc write FDataNasc;

  end;

 

type

  TPessoaHelper = class helper for TPessoa

    private

      function GetIdade: integer;

    public

    property Idade: integer read GetIdade;

  end;

 

TIntHelper = record helper for integer

public

  function ToStr(): String;

end;

 

{ TPessoaHelper }

function TPessoaHelper.GetIdade: integer;

begin

  Result := YearsBetween(Self.DataNasc, Now);

end;

 

{ TIntHelper }

function TIntHelper.ToStr: String;

begin

  Result := IntToStr(Self);

end;

 

procedure TForm1.W3Button5Click(Sender: TObject);

var

  oPessoa: TPessoa;

begin

  oPessoa := TPessoa.Create;

  try

    oPessoa.DataNasc := EncodeDate(19861126); // StrToDate('1986-26-11');

    Edit1.Text := (oPessoa.Idade).ToStr;

  finally

    oPessoa.Free;

  end;

end;

 

Today: 08/17/2014

BirthDate: 1986/26/11

Today - BirthDate = 27

 

Note that we are using ToStr function instead of IntToStr.