La gestion de sélection multiple dans le calendrier est intéressante même si cela donne un peu l'impression de devoir réinventer la roue.
On a maintenant trois variables :
- Selected_Date qui correspond à la date de la dernière cellule sélectionnée par un clic (avec ou sans Ctrl / Shift).
- Selected_Dates qui est la liste des dates sélectionnées. C'est en fait une liste de chaines au format YYYYMMDD, ce qui permet d'utiliser les propriétés Sorted := True et Duplicates := dupIgnore de TStringList, et d'éviter ainsi les problèmes de tri et d'unicité.
- Active_Date qui est la date sélectionnée active (et dont les évènements seront affichés).
Les clics avec Ctrl et Shift ajoutent les jours dans Selected_Dates, mettent à jour Selected_Date, mais ignorent Active_Date, ce qui permettra de conserver l'affichage.
Aujourd'hui, il va falloir distinguer à l'affichage les dates sélectionnées. Toujours pour optimiser et éviter un Refresh de toutes les cellules, le système devrait fonctionner en mode unitaire si besoin :
- Lors des opérations de [dé]sélection : mise à jour des cellules concernées uniquement.
- Lors d'un scroll, appel de cette mise à jour dans la boucle qui de toutes façons rafraichit toutes les cellules.
Dans XT3 on avait un surlignage rouge pour la date du jour et un noir pour la date sélectionnée. Le rouge va disparaitre, la date du jour étant déjà en rouge gras. Les cellules sélectionnées (Selected_Dates) seront à priori entourées de gris sombre et la dernière cliquée (Selected_Date) de noir, comme ça on saura exactement où on en est.