break;\r
\r
case 1:\r
- Maximum = 31;\r
+ switch (QuestionValue->Value.date.Month) {\r
+ case 2:\r
+ if ((QuestionValue->Value.date.Year % 4) == 0 && \r
+ (QuestionValue->Value.date.Year % 100) != 0 && \r
+ (QuestionValue->Value.date.Year % 400) == 0) {\r
+ Maximum = 29;\r
+ } else {\r
+ Maximum = 28;\r
+ }\r
+ break;\r
+ case 4:\r
+ case 6:\r
+ case 9:\r
+ case 11:\r
+ Maximum = 30;\r
+ break;\r
+ default:\r
+ Maximum = 31;\r
+ break;\r
+ } \r
+\r
EraseLen = 3;\r
EditValue = QuestionValue->Value.date.Day;\r
break;\r
\r
if ((Step != 0) && !ManualInput) {\r
if (Key.ScanCode == SCAN_LEFT) {\r
- if (EditValue > Step) {\r
+ if (EditValue >= Minimum + Step) {\r
EditValue = EditValue - Step;\r
- } else {\r
+ } else if (EditValue > Minimum){\r
EditValue = Minimum;\r
+ } else {\r
+ EditValue = Maximum;\r
}\r
} else if (Key.ScanCode == SCAN_RIGHT) {\r
- EditValue = EditValue + Step;\r
- if (EditValue > Maximum) {\r
+ if (EditValue + Step <= Maximum) {\r
+ EditValue = EditValue + Step;\r
+ } else if (EditValue < Maximum) {\r
EditValue = Maximum;\r
+ } else {\r
+ EditValue = Minimum;\r
}\r
}\r
\r