Widget Date Picker

Bonjour à tous,

J’ai tenté d’utiliser ce widget.
J’ai compris qu’il faut mettre la même variable dans le widget et dans la variable que l’on veut saisir et ça fonctionne.
Ca fonctionne si je mets une variable “simple”, par exemple vdate.

Mais si je mets une variable du type Form.MaDate, ça ne fonctionne pas.
Confirmez-vous?
J’ai donc cherché à détecter la modification de la valeur de la variable associée au widget mais je n’ai pas trouvé l’événement déclencheur.

Bonjour Bernard,

je comprends et je confirme, c’est normal.
je vais vous expliquer pourquoi et j’espère que cette réponse servira à beaucoup d’autres personnes.

D’une manière générale, 4D ne peut pas renvoyer un pointeur sur une expression.
(le sujet a déjà été évoqué ici ou là)

Par exemple si vous avez une zone dont le nom d’objet est “ddj” et qui a pour variable/expression current date (ou date du jour si vous travaillez en français) alors si vous tentez d’obtenir un pointeur sur cette zone via Object get pointer(object named;“ddj”) vous obtiendrez NIL.
C’est comme ça et ça ne changera pas de sitôt !

Dans le cas du widget, le même phénomène se produit. Le widget est un sous-formulaire auquel est associée une variable. Cette variable, le widget y accède via un pointeur : Object get pointer(Object subform container). Si ce n’est pas une variable (ou un champ) mais une expression (Form.MaDate est une expression, pas une variable !), alors la commande renvoie NIL et le widget ne marche pas.

J’espère avoir éclairé un peu la situation.

Cordialement,

Roland Lannuzel
(allez, c’est l’heure d’aller voter :slight_smile:

Le plus simple serait de pouvoir mettre un variable du type Form.MaDate mais comme l’a montré Roland, c’est sans espoir.

Je me suis acharné et j’ai trouvé un tourne-autour qui consiste à écrire :
<code 4D>
: (FORM Event.code=On Clicked)
If (FORM Event.objectName=“bTinyCalendar”)
Form.dateBegin:=popupdate //Mise à jour de la variable du formulaire
End if

</code 4D>
popupdate est la variable associée au popup, Form.dateBegin la date à mettre à jour.
Un peu capillotracté mais ça fonctionne…
Reste à tester plus à fond avec des entités par exemple…