Обновление BoldDays TMonthCalendar вручную? - PullRequest
1 голос
/ 19 ноября 2010

Я использую Delphi7.

Я знаю, что могу использовать BoldDays в событии OnGetMonthInfo TMonthCalendar для передачи массива дней, которые я хотел бы отобразить жирным шрифтом.Моя проблема в том, что если новая запись календаря сохранена, я не могу вызвать событие OnGetMonthInfo вручную.

Использование

  MyCalendar.Date:=IncMonth(MyCalendar.Date, -1);
  MyCalendar.Date:=IncMonth(MyCalendar.Date, 1);

обновит календарь и выделенные месяцы, но в Vistaа в Windows7 это вызывает раздражающий «скользящий» эффект календаря.

Есть ли способ обновить его без «специального эффекта»?

Спасибо!

1 Ответ

2 голосов
/ 19 ноября 2010

Вы можете принудительно обновить отображаемые в данный момент календари, отправив сообщение MCM_SETDAYSTATE.

в дополнение к коду для ответа на событие GetMonthInfo

procedure TForm1.GetMonthBoldInfo(month:cardinal):cardinal;
 begin
  ...
 end;

procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; 
            Month: Cardinal; var MonthBoldInfo: Cardinal);
 begin
  monthBoldInfo:=GetMonthBoldInfo(month);
 end;

вам нужен код для обновления при изменении записи календаря ...

var DayStates: array[0..2] of integer;
....
DayStates[0]:=GetMonthBoldInfo(month-1);
DayStates[1]:=GetMonthBoldInfo(month);
DayStates[2]:=GetMonthBoldInfo(month+1);
SendMessage(MonthCalendar1.Handle, MCM_SETDAYSTATE, 3, longint(@DayStates));
...