2010-11-19 6 views
1

Ich benutze Delphi7.BuffDays von TMonthCalendar manuell aktualisieren?

Ich weiß, dass ich BoldDays im OnGetMonthInfo-Ereignis eines TMonthCalendar verwenden kann, um ein Array von Tagen zu übergeben, die fett angezeigt werden sollen.

Mein Problem ist, dass, wenn ein neuer Kalendereintrag gespeichert wird, ich das OnGetMonthInfo Ereignis nicht manuell aufrufen kann.

Mit

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

den Kalender und die bolded Monate auffrischen, aber unter Vista und Windows7 dies erzeugt ein lästiges „rolling“ -Effekt des Kalenders.

Gibt es eine Möglichkeit, es ohne den "Spezialeffekt" zu aktualisieren?

Danke!

Antwort

2

Sie können die Aktualisierung der derzeit angezeigten Kalender erzwingen, indem Sie die Nachricht MCM_SETDAYSTATE senden.

neben dem Code zu dem GetMonthInfo Ereignis

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

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

Sie einen Code müssen reagieren aktualisieren, wenn ein Kalendereintrag ändert ...

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