Обновление BoldDays TMonthCalendar вручную?

Я использую Делфи7.

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

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

С использованием

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

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

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

Спасибо!


person Steve    schedule 19.11.2010    source источник


Ответы (1)


Вы можете принудительно обновить текущие отображаемые календари, отправив сообщение 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));
person PA.    schedule 19.11.2010