1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| //---------------------------------------------------------------------------
void __fastcall T***::MonCalendrierClick(TObject *Sender)
{
TMonthCalendar* Cal = ((TMonthCalendar*)Sender);
bool CalRealClick = false;
// En Vista, on peut choisir le siècle, la décénie, l'année et le mois.
// On ne veut mettre à jour que si on séletionne une date, sinon on retarde le traitement
// au prochain clic sur une date
if ( ! FCalDelayedClick) // FCalDelayedClick est un membre privé de T***, à false par défaut
{
// -> la prise en compte réelle du click du calendrier ne doit pas se faire sur le clic du bandeau de navigation
MCHITTESTINFO CalClicInfo;
CalClicInfo.cbSize = sizeof(CalClicInfo);
CalClicInfo.pt = Cal->ScreenToClient(Mouse->CursorPos);
CalClicInfo.uHit = MCHT_CALENDARDATE ;
int res = Cal->Perform(MCM_HITTEST,0,(LPARAM)&CalClicInfo);
if (res != MCHT_CALENDARDATE)
{
CalClicInfo.uHit = MCHT_TODAYLINK;
res = Cal->Perform(MCM_HITTEST,0,(LPARAM)&CalClicInfo);
if (res == MCHT_TODAYLINK)
CalRealClick = true;
}
else
CalRealClick = true;
if(CalRealClick)
FCalDelayedClick = false;
... Cal->Date ... // ici ton code
}
// Si on veut cacher, on ignore la gestion des vues
// Gestion du calendrier Vista
if( ! CalRealClick && CheckWin32Version(6,0))
{
// le OnClick se produit après que Windows a pris en compte un changement de vue
FCalDelayedClick = Cal->Perform(MCM_GETCURRENTVIEW,0,0) != MCMV_MONTH;
}
} |
Partager