2010-11-19 9 views
1

J'utilise Delphi7.Actualiser manuellement les BoldDays de TMonthCalendar?

Je sais que je peux utiliser BoldDays dans l'événement OnGetMonthInfo d'un TMonthCalendar pour passer un tableau de jours que je voudrais afficher en gras.

Mon problème est que si une nouvelle entrée de calendrier est enregistrée, je ne peux pas appeler l'événement OnGetMonthInfo manuellement.

En utilisant

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

rafraîchira le calendrier et les mois bolded, mais sous Vista et Windows7 cela produit un effet gênant « roulant » du calendrier.

Existe-t-il un moyen de le mettre à jour sans "l'effet spécial"?

Merci!

Répondre

2

Vous pouvez forcer l'actualisation des calendriers actuellement affichés en envoyant le message MCM_SETDAYSTATE.

en plus du code pour répondre à l'événement GetMonthInfo

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

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

vous avez besoin du code pour se rafraîchir lors d'un changement d'entrée de calendrier ...

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