Мелкие замечания по исходникам:
1. Кучу if'ов вида:
If en1<32 then
begin
d2[1]:=en1;
d2[2]:=1;
end;
If (en1>31) and (en1<61) then
begin
d2[1]:=en1-31;
d2[2]:=2;
end;
If (en1>60) and (en1<92) then
begin
d2[1]:=en1-60;
d2[2]:=3;
end;
и т.д.
спокойно можно заменить на две строчки!!!:
d2[1] := d2[1] mod 31;
d2[d] := (en1 div 31) + 1;
У вас таких мест много.
2. Конструкция:
If CheckBox2.Checked=True then
begin
If dmax[2]=1 then en:=0;
If dmax[2]=2 then en:=31;
If dmax[2]=3 then en:=60;
If dmax[2]=4 then en:=91;
If dmax[2]=5 then en:=121;
If dmax[2]=6 then en:=152;
If dmax[2]=7 then en:=182;
If dmax[2]=8 then en:=213;
If dmax[2]=9 then en:=244;
If dmax[2]=10 then en:=274;
If dmax[2]=11 then en:=305;
If dmax[2]=12 then en:=335;
en:=en+dmax[1];
end;
меняется на:
var
DayCount : array [1..12] of integer = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335);
begin
...
en := en + DayCount[en];
...
end;
И таких мест навалом.
3. Если переписать программу с использованием 1 и 2, она станет раз в 10 меньше и понятнее.
p.s. Стиль программирования ужасный! Комментарий на всю программу один! Какой уж тут OpenSource...