2010-11-19 72 views
1

我正在使用Delphi7。手动刷新BoldDays的TMonthCalendar?

我知道我可以在TMonthCalendar的OnGetMonthInfo事​​件中使用BoldDays传递一个我想以粗体显示的日期数组。

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

使用

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

将刷新日历和加粗个月,但在Vista和Windows7这将产生日历的一个恼人的“滚动”的效果。

有没有办法更新它没有“特殊效果”?

谢谢!

回答

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));