2010-11-19 15 views
1

私はDelphi7を使用しています。手動でTMonthCalendarのBoldDaysを更新していますか?

私はBoldDaysをTMonthCalendarのOnGetMonthInfoイベントで使用して太字で表示したい日の配列を渡すことができます。

私の問題は、新しいカレンダーエントリが保存されると、手動で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)); 
関連する問題