Simplemente restamos las dos fechas y listo, que delphi se encargue de los problemas.
Unicamente tenemos que controlar los años a mano, ya que la resta de fechas nos da el año base 1900, que obviamente no es el valor que queremos.
Código Delphi
[-]
d,d1:TDateTime;
yearsouble;
begin
d := encodedatetime(2006,5,12,10,0,0,0);
d1 := d-Now;
years := YearsBetween(d,Now);
Memo1.Lines.Add(FloatToStr(years)+' años '+IntToStr(MonthOf(d1))
+' meses y '+ IntToStr(dayof(d1))+ ' dias' );