![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Добрый день.
Не могу понять как реализовать. В справке 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 меньше быть не может.
|