Mal so als Tipp: Du mußt auch auf den Tag achten, denn z.B. den 30. Februar (März-1, bzw. Januar+1) wird es bestimmt nicht geben.
Aber das hätte dir auch der Debugger gesagt, wenn du dir mal ansiehst, was für Parameter an EncodeDate übergeben werden sollen, wenn es knallt, und daß du diesen Tag auf einem Kalender bestimmt nicht finden wirst.
Oder du wartest noch einen Tag, denn morgen wird dein Code urplötzlich funktionieren.
PS:
IncMonth
DateEdit1.Date := IncMonth(DateEdit1.Date, -1);
Oder
RecodeYear,
RecodeMonth, bzw.
DaysInAMonth uvm. (
DateUtils)