Показать сообщение отдельно
  #1  
Старый 03.04.2016, 17:09
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию Выделить определенные дни в календаре (MONTHCAL_CLASS)

Добрый день.
Не могу понять как реализовать.
В справке MSDN написано:
Код HTML:
#define BOLDDAY(ds, iDay) \ if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1)) case WM_NOTIFY: if (((LPNMHDR)lParam)->code == MCN_GETDAYSTATE) { MONTHDAYSTATE rgMonths[12] = { 0 }; int cMonths = ((NMDAYSTATE*)lParam)->cDayState; for ( int i = 0; i < cMonths; i++) { BOLDDAY(rgMonths[i], 1); BOLDDAY(rgMonths[i], 15); } ((NMDAYSTATE*)lParam)->prgDayState = rgMonths; return TRUE; } break ;

Переделал под Delphi.
Установил стиль MCS_DAYSTATE.

Во всех видимых(?) месяцах, должен быть выделено 15 число .Но не работает.

Код:
var
  DayM :  array [0..11] of MONTHDAYSTATE;

.......

procedure BoldDays(MonthBoldInfo: LongWord; Days: LongWord);
begin
    if (Days > 0) and (Days < 32) then
      MonthBoldInfo := ($00000001 shl (Days - 1));
end;

case PNMHdr(LParam).code of
               
                MCN_GETDAYSTATE:
                  begin    
                    cMonths := pnmdaystate(LParam).cDayState;
                
                    for I := 0 to cMonths do
                      begin
                        BoldDays(DayM[i], 15);
                      end;
                    pnmdaystate(LParam).prgDayState := @daym;
                  end;

Как правильно надо сделать?
Ответить с цитированием