Inscrire un textarea dans un rectangle

'lut,

Dans un svg j’ai un rectangle dans lequel je souhaite mettre un bout de texte:

<code 4D>
C_TEXT($T_SVG)
$T_SVG:=SVG_New
$T_objectRef:=SVG_New_rect ($T_SVG;5;5;200;250)
SVG_SET_OPACITY ($T_objectRef;0;100)

$txt:=“H!”
$T_Tooltip:=SVG_New_textArea ($T_objectRef;$txt;0;0;20;30;“Georgia”;15;Italic;5)

</code 4D>

SVG_New_textArea reçoit la référence du rectangle en paramètre, je m’attends à ce que le texte soit inscrit dans le rectangle. Que nenni : on ne le voit plus !

Hello Bertrand,

Je me demande si dans SVG_New_textArea, tu ne devrais pas plutôt mettre $T_SVG au lieu de $T_objectRef

Bonne Année

Alain

J’ai regardé dans du code à moi, l’objet text area est un objet à part entière, pas un attribut de rectangle. Je ne crois pas que SVG_New_textArea puisse marcher comme tu t’y attends, d’ailleurs la doc précise « La commande SVG_New_textArea insère une zone de texte dans le conteneur SVG désigné par objetSVGParent et retourne sa référence. Si objetSVGParent n’est pas un document SVG, une erreur est générée. »
Autrement dit, tu devrais te prendre une erreur…

Salut Alain,

Ta proposition fonctionne mais le texte n’est pas inscrit dans le rectangle : je souhaite un texte qui se positionne relativement au rectangle.

: Arnaud DE MONTARD

J’ai regardé dans du code à moi, l’objet text area est un objet à
part entière, pas un attribut de rectangle. Je ne crois pas que
SVG_New_textArea puisse marcher comme tu t’y attends, d’ailleurs la
doc précise « La commande SVG_New_textArea insère une zone de texte
dans le conteneur SVG désigné par objetSVGParent et retourne sa
référence. Si objetSVGParent n’est pas un document SVG, une erreur
est générée. »
Autrement dit, tu devrais te prendre une erreur…

PAs d’erreur mais pas de résultat.

Quelle est la technique pour mettre un texte dans un rectangle et mettre à jour le texte ?

Je ne mets pas le texte “dans” le rectangle, mais “par dessus”, comme l’exemple 1 de la doc.

PS : d’ailleurs j’avais fini par mettre les textes au lieu du texte, après avoir découpé ce dernier en plusieurs lignes. À l’époque une textArea n’était rendue que par Opera, les autres navigateurs ne savaient pas faire.

OK ça marche ainsi. Que c’est dur quand on débute ! :pray:

: Arnaud DE MONTARD

Je ne mets pas le texte “dans” le rectangle, mais “par dessus”, comme
l’exemple 1 de la doc.
l’inconvénient de cette technique surgit quand on veut cliquer sur l’objet de référence : on risque fort de récupérer la référence de l’objet en haut de la pile!

En effet, l’événement peut avoir lieu sur le rectangle ou le texte, il faut gérer les deux. Dans mon cas il s’agit d’un planning où chaque enregistrement d’une table [Evenement] est représenté par {un texte + un rectangle}. Je donne comme ID svg la clé de l’enregistrement suivie de “_rect” pour le rectangle et “_txt” pour le texte :
<code 4D>
$eventPK_t:=Chaine([Evenement]PK)
$rectID_t:=SVG_New_rect (…)
SVG_SET_ID ($rectID_t;$eventPK_t+"_REC")
$txtID_t:=SVG_New_text (…)
SVG_SET_ID ($txtID_t;$eventPK_t+"_TXT")
</code 4D>
Ensuite, je peux lire cet ID avec :
<code 4D>
$rollover_t:=SVG Chercher ID element par coordonnees(*;“zonePlanning”;MouseX;MouseY)
</code 4D>
et le tripatouiller pour reconstituer ma paire de références :
<code 4D>
$rollover_t:=Remplacer chaine($ref_t;"_TXT";"")
$rollover_t:=Remplacer chaine($ref_t;"_REC";"")
$rect_t:=$rollover_t+"_REC"
$txt_t:=$rollover_t+"_TXT"
$rectSvgID_t:=SVG_Find_ID (SVGplanning_t;$rect_t)
$txtSvgID_t:=SVG_Find_ID (SVGplanning_t;$txt_t)
</code 4D>

il faut donner à la textArea les même coordonnées que le rectangle (moins un chouillat)

<code 4D>
C_TEXT($T_SVG)
$T_SVG:=SVG_New
$T_objectRef:=SVG_New_rect($T_SVG;5;5;200;250)
SVG_SET_OPACITY($T_objectRef;0;100)

$txt:=“H!”
$T_Tooltip:=SVG_New_textArea($T_SVG;$txt;5+1;5+1;200-1;250-1;“Georgia”;15;Italic;5)
</code 4D>

http://livedoc.4d.com/4D-Langage-17-R3/SVG/SVG-Chercher-ID-element-par-coordonnees.301-3906402.fr.htmlSVG Chercher ID element par coordonnees> remonte dans l’arbre jusqu’à trouver un ID.

Une bonne façon de faire est donc de créer un groupe avec un ID, puis de mettre dedans le rectangle et la textArea sans ID.

Lors du survol de l’un de ces 2 objets, c’est l’ID du groupe qui sera retourné.