Правильно пишет. Тут есть особенность, что у типа TDateTime значение 0 соответсвует 1 января 1900 года (если не ошибаюсь). В принципе, можно либо посчитать грубо (в году 365 дней, в месяце 30 деней), либо извращаиться с DaysBetween, MonthsBetween (года - по последней).
Первый вариант выглядит так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
p,v,rez:TDate;
ds : integer;
y, m, d : integer;
begin
p:=strtodate(Edit1.Text);
v:=strtodate(Edit2.Text);
rez:=p-v;
ds := trunc(rez);
y := ds div 365;
m := (ds mod 365) div 30;
d := (ds mod 365) mod 30;
Label1.Caption:=format('%d.%d.%d',[d,m,y]);
end;