|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Выделить определенные дни в календаре (MONTHCAL_CLASS)
Добрый день.
Не могу понять как реализовать. В справке MSDN написано: Код HTML:
Переделал под 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; Как правильно надо сделать? Последний раз редактировалось Stalker2-42, 03.04.2016 в 19:33. |
#2
|
||||
|
||||
используй событие OnGetMonthInfo у TMonthCalendar. пиши там:
Код:
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal); begin MonthCalendar1.BoldDays([15], MonthBoldInfo); end; Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Код:
TOnGetMonthInfoEvent = procedure(Sender: TObject; Month: LongWord; var MonthBoldInfo: LongWord) of object; FOnGetMonthInfo: TOnGetMonthInfoEvent; property OnGetMonthInfo: TOnGetMonthInfoEvent read FOnGetMonthInfo write FOnGetMonthInfo; procedure TMonthCalendar.CNNotify(var Message: TWMNotify); var ST: PSystemTime; I, MonthNo: Integer; CurState: PMonthDayState; begin with Message, NMHdr^ do begin case code of MCN_GETDAYSTATE: with PNmDayState(NMHdr)^ do begin FillChar(prgDayState^, cDayState * SizeOf(TMonthDayState), 0); if Assigned(FOnGetMonthInfo) then begin CurState := prgDayState; for I := 0 to cDayState - 1 do begin MonthNo := stStart.wMonth + I; if MonthNo > 12 then MonthNo := MonthNo - 12; FOnGetMonthInfo(Self, MonthNo, CurState^); Inc(CurState); end; end; end; end; end; inherited; end; CurState возвращает год. FOnGetMonthInfo = procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Код:
Cardinal; var MonthBoldInfo: Cardinal); begin MonthCalendar1.BoldDays([15], MonthBoldInfo); end; Я запутался. |
#4
|
||||
|
||||
Желающих подсказать нет?
|
#5
|
||||
|
||||
так второе сообщение прекрасно выделяет 15 число в каждом месяце!
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Stalker2-42 (08.04.2016)
|
#6
|
||||
|
||||
NumLock.
Спасибо. Вроде как работает. Код:
var DayM : array [1..12] of MONTHDAYSTATE; ...... procedure BoldDays(var ds: MONTHDAYSTATE; iDay: array of LongWord); var I : Integer; begin for I := Low(iDay) to High(iDay) do if (iDay[i] > 0) and (iDay[i] < 32) then ds := ds or ($00000001 shl (iDay[i] - 1)); end; var cMonths : LongWord; WM_NOTIFY: begin if PNMHdr(LParam).hwndFrom = Calendar then begin case PNMHdr(LParam).code of MCN_GETDAYSTATE: begin cMonths := pnmdaystate(LParam).cDayState; for I := 1 to cMonths - 1 do BoldDays(DayM[i], [12 , 15, 16, 17, 18,29, 30, 31]); pnmdaystate(LParam).prgDayState := @daym; end; end; end; end; Караул. В delphi 2010 нет большей части сообщений (mcm_) описанных в MSDN. Последний раз редактировалось Stalker2-42, 08.04.2016 в 23:14. |
#7
|
||||
|
||||
ну не большей части, а немного не все. у Month Calendar Messages в MSDN примерно 32 сообщения, а в Delphi 7 примерно 23. в Delphi 2010 меньше быть не может.
Пишу программы за еду. __________________ |