Passage d'un paramètre à un Dialogue vers une Variable formulaire

Bonjour,

Autant je ne suis pas fan des variables dynamiques, autant j’avais été intéressé par les variables formulaires, notamment lors du webinaire. J’avais d’ailleurs posé une question à ce sujet sans succès :
https://discuss.4d.com/t/variables-formulaires/12716?u=bernard_vach%C3%A9

J’ai donc tenté le code ci-dessous :

$fopage:="DI_Choix_ChampN"

$fnty:=Plain window
$fnpho:=Horizontally centered
$fnpvt:=Vertically centered
$refFen:=Open form window([DIALOGUE];$fopage;$fnty;$fnpho;$fnpvt)

C_OBJECT($fopage)  // Objet générique de passage de paramètre à un formulaire
OB SET($fopage;"NuTable";1)  // passera la valeur 1 vers la variable formulaire Form.NuTable

DIALOG([DIALOGUE];$fopage)

Dans mon formulaire, j’ai créé une variable formulaire ‘Form.NuTable’ de type numérique et j’espérais voir le formulaire s’ouvrir et afficher la valeur 1 dans cette variable.
Malheureusement, j’obtiens un message “Impossible de charger le formulaire”.
Je croyais avoir compris que l’objet assurant le passage de paramètre(s) devait porter le même nom que le formulaire. Je me trompe ?
Qu’est-ce qui coince à votre avis ?

Bonjour Bernard,
non, nom du formulaire et passage d’un objet ce sont 2 choses distinctes, l’objet paramètre est un paramètre de plus après le nom du formulaire :
DIALOG([DIALOGUE];“nomFormulaire”;ObjetParametres)

Si je peux me permettre, je ne vois pas l’interêt de copier le nom du formulaire et des 3 constantes dans des locales… à part compliquer la recherche de l’erreur :wink:

Ça devrait marcher comme ça :

c_object($formData_o)
$refFen:=open form window([DIALOGUE];"DI_Choix_ChampN";Plain window;Horizontally centered;Vertically centered)
$formData_o:=new object
$formData_o.NuTable:=1
DIALOG([DIALOGUE];"DI_Choix_ChampN";$formData_o)

Je n’ai pas cette constante : Plain window. En revanche : Plain form window est là

Ha oui, t’as raison. C’est la constante pour Créer fenetre, pas pour Créer fenêtre formulaire. Dans le cas présent, ça ne change rien dans la mesure où les deux valent 8. Reste qu’utiliser les constantes d’une commande pour une autre, un jour, ça risque de nous retomber sur la figure…

Ça confirme aussi ce que je disais dit plus haut, vaut mieux utiliser directement les constantes plutôt que transiter par des locales ; à la saisie, 4D limite ce genre d’erreur en proposant celles qui conviennent :

2 Likes

Comment faites vous pour avoir des fenêtres plein ecran sans barre menu sous windows ?
J’ai construit des formulaires projet que je lance avec Dialogue. Avec la constante 8 il reste en haut le bandeau blanc avec le sigle 4D.
Avec les fenetres modales 1 et 5 j’ai des pb (mon post sans solution Fenetres Impression Alerte ou enumération perdues derriere fenetre modale type 1)

Puis question élégance…

Merci Arnaud et Bertrand,

Effectivement, j’ai repris un bout de code un peu ancien (et pas trop propre) pour tester cette nouvelle fonctionnalité.
Le passage des paramètres de la fenêtre par des variables locales intermédiaires doit dater d’une époque où j’évitais d’avoir des lignes trop longues pour la largeur de mon écran.
J’ai remplacé ‘Plain window’ par ‘Plain form window’ : c’est plus prudent.
Je créais l’objet avec C_OBJECT mais j’avais oublié de l’initialiser avec new object.
Maintenant ça marche presque :slight_smile:

  • le formulaire n’explose plus au chargement
  • je récupère bien la valeur dans Form.NuTable en traçant l’exécution de la méthode formulaire.

Par contre, j’avais ajouté une variable numérique pour afficher Form.NuTable. Or, celle-ci n’affiche toujours rien.
Une idée ?

Je me répons à moi-même.
Le problème d’affichage est réglé : j’avais oublié la majuscule dans Form.NuTable

Merci encore

Avec la syntaxe OB SET il n’est pas nécessaire de dire New object, seulement avec la notation objet.

Merci de cette précision.
Grace à vous 2, c’est un epu plus clair pour moi.