Здравствуйте, Botsman.
Даты вводятся в поля TDateTimePicker, обрабатываются по нажатию кнопки, каждый компонент возраста отдельно (вычитание дат в типе TDateTime не стала использовать, потому что результат всё равно требует дополнительной обработки). Код функции обработчика в приложении, проект и исполняемый файл -
здесь. Исполняемый файл пересобрала, пробовала на другом компьютере без установленной среды - вроде запускается.
Удачи!
Приложение:
void __fastcall TForm1::OkButtonClick(TObject *Sender)
{
TDateTime bd = Form1->birthDate->DateTime; //сохраняем даты
TDateTime nd = Form1->nowDate->DateTime;
//проверяем, корректны ли даты
if (bd>nd) { Form1->result->Caption = "Ошибочные данные"; return; }
unsigned short y1, y2, m1, m2, d1, d2;
unsigned short yr, mr, dr;
bd.DecodeDate(&y1, &m1, &d1); //получаем значения лет, месяцев и дней
nd.DecodeDate(&y2, &m2, &d2);
yr = y2-y1-1; //вычисляем разницу
if (m2>m1 || (m2==m1 && d2>d1)) yr++;
mr = 12-m1+m2-1;
if (d2>=d1) { mr++; dr = d2-d1; }
else dr = DaysInMonth (bd)-d1+d2;
if (mr>=12) mr = 0;
//выводим данные
Form1->result->Caption = "Возраст на отчётную дату: " + IntToStr (yr) +
" лет, " + IntToStr (mr) + " месяцев, " + IntToStr (dr) + " дней.";
}