Détecter un clic sur une expression 4D dans Write Pro

Bonjour,

soit une zone Write Pro dans laquelle j’ai inséré dans le texte une expression 4D (ou plusieurs, évidemment)
je voudrais détecter que je clique sur cette expression dans le texte, afin de déclencher un popup menu me permettant de choisir la valeur à mettre dans expression
En fait du menu contextuel dans Write Pro…

Dans Write (plug in) j’utilisais
WR APPELER SUR EVENEMENT
WR Compter
WR LIRE SELECTION
WR SELECTIONNER
WR LIRE REFERENCE…

Je suis vraiment perdu dans les commandes Write Pro…

: Marc DAHLET

Bonjour,

soit une zone Write Pro dans laquelle j’ai inséré dans le texte une
expression 4D (ou plusieurs, évidemment)
je voudrais détecter que je clique sur cette expression dans le
texte, afin de déclencher un popup menu me permettant de choisir la
valeur à mettre dans expression
En fait du menu contextuel dans Write Pro…

Dans Write (plug in) j’utilisais
WR APPELER SUR EVENEMENT
WR Compter
WR LIRE SELECTION
WR SELECTIONNER
WR LIRE REFERENCE…

Je suis vraiment perdu dans les commandes Write Pro…

Hi Marc,

it is not complicated.

Inside the object method of your WParea you can add something like this:
<code 4D>
: (Form event=On Selection Change)
$return:=ST Get content type(;$WP_areaName)
Case of
: ($return=ST Expression type)
$vt_Expression:=ST Get expression(
;$WP_areaName)
// do something and show your pop up
End Case
: (Form event=On Double Clicked)
$return:=ST Get content type(;$WP_areaName)
Case of
: ($return=ST Expression type)
$vt_Expression:=ST Get expression(
;$WP_areaName)
// do something and edit
End Case

</code 4D>

Armin

Thank You very much Armin

first tests are OK !!!

It is so simple when one expert helps…

Thank You so much

Nice Evening

Marc

Je suis encore bloqué…

Le clic est détecté
le popup apparaît
expression prend la valeur du popup
puis
ST INSÉRER EXPRESSION(;$WP_areaName;expression)
ST FIGER EXPRESSIONS(
;$WP_areaName)

mais, à l’écran, la valeur de expression n’apparaît pas.
Si je recommence, la valeur choisie au passage précédent apparaît maintenant

J’ai essayé beaucoup de choses, mais sans résultat…

: Marc DAHLET

Je suis encore bloqué…

Le clic est détecté
le popup apparaît
expression prend la valeur du popup
puis
ST INSÉRER EXPRESSION(;$WP_areaName;expression)
ST FIGER EXPRESSIONS(
;$WP_areaName)

mais, à l’écran, la valeur de expression n’apparaît pas.
Si je recommence, la valeur choisie au passage précédent apparaît
maintenant

J’ai essayé beaucoup de choses, mais sans résultat…

You meant this one?
<code 4D>
ST INSERT EXPRESSION(;$WP_areaName;expression)
ST COMPUTE EXPRESSIONS(
;$WP_areaName;ST Start text;ST End text)
</code 4D>

Hi Armin,
no, ST FIGER EXPRESSIONS stands for ST FREEZE EXPRESSIONS in french.
Or https://doc.4d.com/4Dv18/4D/18/ST-FIGER-EXPRESSIONS.301-4504957.fr.html:C1282>, if you prefer :mrgreen:

<code 4D>
: (Événement formulaire=Sur nouvelle sélection)
$WP_WidgetPtr->:=$WP_object
$return:=ST Lire type contenu(;$WP_areaName)
Si ($return=ST Type expression)
$vt_Expression:=ST Lire expression(
;$WP_areaName)
Au cas ou
: ($vt_Expression=“expression_4D”)
expression_4D:=“my_string_t”

						Si (expression_4D#"")

							ST INSÉRER EXPRESSION(*;$WP_areaName;"expression_4D";ST Début sélection;ST Fin sélection)

							ST CALCULER EXPRESSIONS(*;$WP_areaName;ST Début sélection;ST Fin sélection)

</code 4D>

quand le formulaire revient à l’écran, expression_4D n’a pas la valeur my_string_t
Si je re clique dessus, my_string_t y est…

J’ai identifié que c’est la façon dont je construis my_string_t qui est à l’origine du problème (methode générique pop up)
En effet, si j’écris my_string_t:=“test” my_string_t apparaît bien dans la zone…

Donc le problème est dans mon code de l’utilisation du popup…

Désolé

NB : pour Arnaud : c’est le recours à la méthode générique sp_pop_tab qui cause le problème, mais je ne trouve pas l’explication…

: Marc DAHLET

NB : pour Arnaud : c’est le recours à la méthode générique sp_pop_tab
qui cause le problème, mais je ne trouve pas l’explication…
Comme ce processus passe par un dialogue de choix, je me demande si ça n’est pas un problème de perte de l’élément write sélectionné dans la zone, quand la fenêtre se ferme. Tu as un moyen de vérifier ce point ?

Le gallon US ou gallon américain est une mesure valant exactement 231 pouces cubes.
Le genre de trucs qui rend la conversion en litres évidente.

Hello

oui, en trace j’ai vérifié. Ce n’est pas ça.

PS

autre unité amusante : le PSI : pound per square inch…

Bon, malgré le suivi pas à pas en mode trace en notant sur un papier toutes les informations possibles, je n’ai pas pu identifier en quoi ma méthode générique sp_pop_tab était responsable du problème, si ce n’est, probablement, parce qu’elle ouvre un formulaire dialogue, et que c’est après que ça ne va pas. (perte de quoi ???)
J’ai bien vérifié (reproductible) que si je ne passais pas dans cette méthode, et que je renseignais mon_Expression_4D sans passer par un écran de dialogue, le fonctionnement était OK.

Du coup j’ai essayé en “encapsulant” la méthode sp_pop_tab dans un autre process : et là ça fonctionne :

<code 4D>
: (Événement formulaire=Sur nouvelle sélection)
$WP_WidgetPtr->:=$WP_object
$return:=ST Lire type contenu(;$WP_areaName)
$vt_Expression:=ST Lire expression(
;$WP_areaName)
Au cas ou
: ($return=ST Type expression)
Au cas ou
: ($vt_Expression=“mon_Expression_4D”)
<>maVar:=""
$monProcess:=Nouveau process(“VarWP_Popup”;0;“Process_WP_Popup”)
Tant que (<>maVar="")
ENDORMIR PROCESS(Numéro du process courant;5)
Fin tant que
mon_Expression_4D:=<>maVar
Si (mon_Expression_4D#"")
ST INSÉRER EXPRESSION(*;$WP_areaName;“mon_Expression_4D”;ST Début sélection;ST Fin sélection)
Fin de si
<>maVar:=""
Fin de cas
</code 4D>