2010-11-19 17 views
1

Delphi7 kullanıyorum.TMonthCalendar’un BoldDays el ile mi dolduruluyor?

BoldDays'ı bir TMonthCalendar ürününün OnGetMonthInfo olayında kalın olarak görünmesini istediğim bir dizi gün geçirmek için kullanabileceğimi biliyorum.

Sorunum, yeni bir takvim girdisi kaydedildiğinde, OnGetMonthInfo olayını el ile çağıramam.

takvim ve kalın ay yenilenir

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

kullanma

ancak Vista ve Windows7 altında bu takvimin sinir bozucu bir "döner" etkisi yaratır.

"Özel efekt" olmadan güncellemenin bir yolu var mı?

Teşekkürler!

cevap

2

Görüntülenen görüntülenen takvimlerin yenilemesini, MCM_SETDAYSTATE mesajını göndererek zorlayabilirsiniz.

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

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

bir takvim girdisi değiştirdiğinde yenilemek için bazı kod gerekir GetMonthInfo olaya tepki koduna ek olarak

...

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