手动刷新TMonthCalendar的BoldDays?

时间:2010-11-19 10:47:19

标签: delphi delphi-7 monthcalendar

我正在使用Delphi7。

我知道我可以在TMonthCalendar的OnGetMonthInfo事​​件中使用BoldDays来传递我想以粗体显示的天数。

我的问题是如果保存了新的日历条目,我就无法手动调用OnGetMonthInfo事​​件。

使用

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

将刷新日历和加粗月份,但在Vista和Windows7下,这会产生令人讨厌的日历“滚动”效果。

有没有办法在没有“特殊效果”的情况下更新它?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过发送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));