Вверх ↑
Ответов: 1
Рейтинг: 0
#1: 2018-05-29 13:37:22 ЛС | профиль | цитата
Решение с использованием стандартной компоненты
Ошибка возникает при переходе через год.
Если хотите чтобы этой проблемы не было нужно:
1. Создать объект наследник от TMonthCalendar
2. У наследника написать метод procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
procedure <наследник>.CNNotify(var Message: TWMNotify);
var
I, MonthNo,YearNo: Integer;
CurState: PMonthDayState;
begin
inherited;//обязательно вначале если вы хотите выделять жирным необходимые дни
// иначе переменная CurState заполняется не для того года в предке!!
with Message, NMHdr^ do
begin
case code of
MCN_GETDAYSTATE:
with PNmDayState(NMHdr)^ do
begin
FillChar(prgDayState^, cDayState * SizeOf(TMonthDayState), 0);
CurState := prgDayState;
for I := 0 to cDayState - 1 do
begin
YearNo:=stStart.wYear ;
MonthNo := stStart.wMonth + I;
if MonthNo > 12 then
begin
MonthNo := MonthNo - 12;
YearNo:=stStart.wYear +1;
end;
<Вызов вашей процедуры с правильным годом>(YearNo, MonthNo, CurState^);
// передаваемые параметры
Inc(CurState);
end;

end;
end;
end;

3 Используйте этот объект для верной передачи года
4 Удобнее дописать событие вместо <Вызов вашей процедуры с правильным годом> и зарегистрировать этот объект как новый компонент в IDE
карма: 0

0
Редактировалось 2 раз(а), последний 2018-05-29 13:42:46