PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV (versões anteriores) → Modifier la couleur d'une date dans le Calendrier d'une zone répétée
Modifier la couleur d'une date dans le Calendrier d'une zone répétée
Iniciado por Jennifer, fev., 14 2025 4:24 PM - 5 respostas
Membro registado
17 mensagems
Publicado em fevereiro, 14 2025 - 4:24 PM
Bonjour,

J'utilise actuellement la version 2024 de Windev.

J'aimerai afficher plusieurs calendriers (affichant chacun un mois différent) sur un même écran et sur chaque calendrier mettre sur couleur de fond différente certaines dates.

1ère solution :
Je crée une zone répétée et j'insère un champ calendrier dans les répétitions.
En utilisant les propriétés BorneMin et BorneMax du champ Calendrier, chaque calendrier affiche le mois souhaité.





Je voudrais sur chaque calendrier mettre en évidence différentes dates en utilisant la propriété CouleurFond.
Côté code je n'ai pas d'erreur, par contre à l'exécution j'ai le message :

ZR_SansNom2[1].CAL_SansNom1[dDate]..CouleurFond = RougePastel

Le champ ZR_SansNom2.[1].CAL_SansNom1 ne supporte pas l'opérateur [ ].


2e solution :
Je crée une zone répétée que j'alimente par une fenêtre interne.
J'arrive à avoir les calendriers sur des mois différents et sur chacun d'eux des dates différentes sélectionnées mais je me retrouve avec un seul calendrier par ligne car l'utilisation de fenêtre interne nécessite d'activer l'option "Utiliser une Fenêtre interne par ligne".

Quelqu'un a-t-il déjà eu ce souci, si oui comment l'a t-il résolu ?

Merci de votre aide.

Jennifer
Publicado em fevereiro, 17 2025 - 1:50 PM
Bonjour

Je vois votre problème, vous souhaitez colorier une date dans un calendrier ensuite dans une zone répétée, ce n'est pas une bonne pratique, j'ai une solution pour vous

1. Vous devrez supprimer le champ zone répétée si possible, ensuite vous ajoutez 12 champ calendrier, vous devrez utiliser les ancrages pour chaque calendrier, le mieux c'est de mettre en 3 colonne et 4 ligne pour synchroniser avec l'ancrage de WLangage

Pour ce cas lors de la coloriage d'une date dans un calendrier, ce sera pratique de programmer
// EDD (02/25) : voilà un programme dynamique pour vous
// EDD (02/25) : créer un champ bouton et copier ce programme dans l'évènement du clique du bouton
LOCAL
cCalendrier is ClCalendrier_Couleur
cCalendrier:m_sChamp = "CAL_Template"
cCalendrier:m_dDate = "20250228" // EDD (02/25) : si la date se situe la date aujourd'hui alors il n'y a pas de changement de couleur de fond
cCalendrier:m_cCouleur = RougePastel // EDD (02/25) : dans le cas d'un couleur invalide alors le couleur noir est le par défaut
cCalendrier:Validation()
IF cCalendrier:m_bRetour = True THEN
cCalendrier:Lancement()
END

// EDD (02/25) : créer un nouveau classe
ClCalendrier_Couleur est une Classe
m_bRetour is booléen
m_dDate is Date
m_cCouleur is Couleur
m_sChamp is string
FIN

// EDD (02/25) : créer deux méthodes dans la classe ClCalendrier_Couleur
PROCÉDURE Validation()
:m_bRetour = True
IF DateValide(:m_dDate) = False THEN
:m_bRetour = False
Info("Merci de vérifier la date.")
ELSE IF NoSpace(:m_sChamp) = "" THEN
:m_bRetour = False
Info("Merci de remplir le champ calendrier.")
ELSE IF ChampExiste(:m_sChamp) = False THEN
:m_bRetour = False
Info("Merci de vérifier le champ calendrier.")
END

PROCÉDURE Lancement()
{:m_sChamp, indChamp}[:m_dDate]..CouleurFond = :m_cCouleur

NB : dans le cas ou il y aura plusieurs calendrier, il suffit de remplacer les valeurs des variables :m_sChamp | :m_dDate | :m_cCouleur vous avez le choix des valeurs

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Publicado em fevereiro, 17 2025 - 4:45 PM
Bonjour Mr.RATSIMANDRESY Niry Aina Eddy,

Merci beaucoup pour ta réponse. Assez complète et effectivement assez éloignée de ce vers quoi j'étais partie.

J'ai ajouté la classe et les deux méthodes suggérées. Je pense avoir compris le principe.
Pour l'instant je n'ai pas su répondre à tous les besoins :
- comment faire pour forcer par programmation les bornes min et max de chaque calendrier de sorte à ne pas avoir les 12 calendriers sur le même mois ? Je pensais faire quelques chose comme ceci mais j'ai un message d'erreur :

{:m_sChamp, indChamp}.BorneMin = :m_dBorneMin


Erreur :'BorneMin' est inconnu pour cet élément.


- Comment faire dans le cas où j'aurais besoin de plus de 12 calendriers étant donné que je dois les insérer manuellement dans l'interface graphique ?

Merci beaucoup de votre aide,
Membro registado
949 mensagems
Publicado em fevereiro, 18 2025 - 12:25 AM
Bonjour,
Si ça peut vous aider :
Créer 12 calendrier directement sur une fenêtre (Calendrier1, Calendrier2, ... , Calendrier12)

Dans le code d'initialisation de la fenêtre :

sYear est un entier = 2025

POUR i = 1 _À_ 12

MonJourDebut est une Date
MonJourDebut = PremierJourDuMois(sYear, i)

MonJourFin est une Date
MonJourFin = DernierJourDuMois(sYear, i)

sCalend est une chaîne = "Calendrier" + i
{sCalend, indChamp}..BorneMin = MonJourDebut
{sCalend, indChamp}..BorneMax = MonJourFin
FIN


Dans le code d'un bouton sur la fenêtre :

sCalend est une chaîne
sCalend = "Calendrier" + 1

//POUR i = 1 _A_ CalendrierSelectOccurrence(sCalend)
// ToastAffiche(CalendrierSelect(sCalend,i)) // Afficher le jour sélectionné dans Calendrier 1
//FIN

{sCalend, indChamp}[20250112]..CouleurFond = RougeClair
{sCalend, indChamp}[20250125]..CouleurFond = RougeClair

sCalend = "Calendrier" + 3
{sCalend, indChamp}[20250320]..CouleurFond = RougeClair


Cdlt
Publicado em fevereiro, 18 2025 - 11:50 AM
Bonjour Cédric_34,

Merci beaucoup pour votre aide. Je n'avais pas pensé à utiliser .. pour accéder à BorneMin et BorneMax.
J'avoue ne pas très bien comprendre dans quels cas il faut mettre . et dans quels cas il faut mettre ..
Toujours est-il que j'ai maintenant quelque chose qui fonctionne comme je le souhaite.
Pour ne pas laisser des calendriers fantômes dans l'écran, je les rend invisible si je n'ai aucune date à leur sélectionner.
Ainsi j'obtiens ceci :




Membro registado
4.256 mensagems
Publicado em fevereiro, 18 2025 - 6:37 PM
Bonjour,
Jennifer a écrit :
J'avoue ne pas très bien comprendre dans quels cas il faut mettre . et dans quels cas il faut mettre ..

L'accès aux propriété via . (un point) ou .. (2 points) sont équivalents depuis la version 25 (ou 24.) Auparavant, on ne pouvait accéder au propriétés que par .. (2 points.)
Par acquis de conscience (et par habitude en ce qui me concerne) les "anciens" continuent souvent à utiliser la notation .. (2 points.)

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM