Variable de type heure avec expression Form.?

J’ai un objet que je passe à mon dialogue avec un paramètre “MonHeure” de type Heure.

Dans mon formulaire, j’ai un objet formulaire auquel j’affecte l’expression “Form.MonHeure”
A l’affichage du dialogue mon objet est vide :?: :!: si je clique dedans s’affiche l’heure en seconde sous forme de chiffres ? (1h=3600)

Est-ce normal ? comment on gère les parametres objets de type heure ?

essaie de faire la même chose en v16 puis en v17. Les heures en notation objet posent problème en v16

Bonjour

Depuis l’origine des objets dans 4D, les heures ne sont pas gérées dans les objets en tant qu’heures mais en tant que numériques. Indépendamment de “Form”.

L’expression associée dans le formulaire doit être Time string(Form.monHeure)

Pour info :

Les heures sont traitées en millisecondes par défaut en v16, en secondes par defaut en v17)
Pour changer cette valeur par défaut utiliser http://doc.4d.com/4Dv17/4D/17/SET-DATABASE-PARAMETER.301-3730407.en.htmlset database parameter]set database parameter>

Voir aussi le manuel de http://doc.4d.com/4Dv17/4D/17/Changement-de-comportement.200-3811870.fr.htmlMigration> (il y a toujours des choses qui échappent quand on ne prend pas le temps de le lire :-))

<<
Heures exprimées en secondes

A compter de la v17, les heures 4D (type C_HEURE) manipulées via les propriétés d’objet sont converties en nombre de secondes. Dans les versions précédentes, elles étaient converties en nombre de millisecondes.
(…)

Et voila :slight_smile:

Roland

Désolé, mais cela ne répond pas à ma question. :-?

Dans mon cas, il s’agit de passage de parametres qui ne sont PAS stockés, donc le changement de comportement (que j’avais vu/lu :razz:) ne vient en rien perturber ce que je demande.

Si j’affecte à un objet formulaire l’expression Chaine Heure(Form.monHeure) certes elle s’affiche correctement mais l’utilisateur ne peut pas la modifier ?!

Qui plus est, cela n’explique en rien pourquoi quand j’affecte directement l’expression Form.monHeure à l’objet il n’affiche pas au moins les infos en numerique comme vous me dites :?:
Les infos n’apparaissent qu’une fois que l’on clique dedans !

Ma question est: est-il possible de gérer une “variable heure” dans un dialogue avec une expression Form.MonHeure ? est si oui comment ?

En changeant le type de l’objet formulaire en numérique je récupère l’affichage.

Mais est-ce normal de devoir gérer les heures provenant de l’objet Form de cette façon :?: :

<code 4D>
C_ENTIER LONG($Event)
$Event:=Événement formulaire

Au cas ou
: ($Event=Sur chargement)
(OBJET Lire pointeur(Objet nommé;“TT_Heure_RespC”))->:=Form.TT_Heure_RespC
: ($Event=Sur libération) | ($Event=Sur données modifiées)
Form.TT_Heure_RespC:=(OBJET Lire pointeur(Objet nommé;“TT_Heure_RespC”))->
Fin de cas

</code 4D>

Du coup, avec un objet formulaire typé heure et aucune expression (variable dynamique).

(re)bonjour

J’avais quasiment répondu le même chose mais il y a eu un pb lors de l’envoi de ma réponse :frowning:

La réponse est “oui” (au moins pour le moment), mais ce n’est pas lié à l’objet “Form” mais aux objets en général. Dans les objets, les heures sont gérées comme des numérique, il faut l’accepter… :slight_smile:

Mais comme depuis la v17 les heures sont gérées en secondes et plus en milliscondes, il n’y a pas de conversion à faire, c’est simple.

monObjet.monNumerique := MonHeure -> dans un sens
MonHeure := monObjet.monNumerique -> au retour

Roland

Du coup, je me suis fait une générique: (il faudra juste nommer l’objet formulaire avec le nom du paramètre à gérer dans le dialogue, activer les evenements et ajouter la méthode objet suivante… :-()
<code 4D>
C_ENTIER LONG($Event)
$Event:=Événement formulaire

C_TEXTE($NomObjet)
$NomObjet:=OBJET Lire nom

Au cas ou
: ($Event=Sur chargement)
(OBJET Lire pointeur(Objet nommé;$NomObjet))->:=Form[$NomObjet]
: ($Event=Sur libération) | ($Event=Sur données modifiées)
Form[$NomObjet]:=(OBJET Lire pointeur(Objet nommé;$NomObjet))->
Fin de cas

</code 4D>

Mais, c’est un peu bête de devoir gérer cela comme ça je trouve…