2010-11-19 2 views
1

저는 Delphi7을 사용하고 있습니다.수동으로 TMonthCalendar의 BoldDays를 새로 고침 하시겠습니까?

TMonthCalendar의 OnGetMonthInfo 이벤트에서 BoldDays를 사용하여 굵게 표시하려는 일의 배열을 전달할 수 있다는 것을 알고 있습니다.

내 문제는 새로운 일정 항목이 저장되면 OnGetMonthInfo 이벤트를 수동으로 호출 할 수 없다는 것입니다.

달력과 굵은 개월을 새로 고쳐집니다

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

를 사용

하지만, Vista 및 Windows7의에서이 달력의 성가신 "롤링"효과를 생성합니다.

"특수 효과"없이 업데이트하는 방법이 있습니까?

감사합니다.

답변

2

MCM_SETDAYSTATE 메시지를 보내 현재 표시된 일정을 새로 고칠 수도 있습니다.

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

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

당신이 일정 항목이 변경 될 때 새로 고침 몇 가지 코드를 필요로하는 GetMonthInfo의 이벤트에 응답하는 코드에 추가

...

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