Changement de texte et de couleur en fonction d'un champ EDIT:(police modifiée)  (Lu 135 fois) Partager ce sujet Imprimer

1 B


Minautore  10 septembre 2020 : 16:46

Bonjour,

Tout d'abord bravo et merci pour votre forum, il m'a déjà bien aidé.

Dans un de mes formulaires, un questionnaire se termine par un scoring.

J'ai un champ texte qui me donne le résultat.

J'aimerais avoir à côté de ce champ un autre qui indique un commentaire en couleur (0=parfait en vert, 1-2= bien en jaune, 3-7=moyen en orange et 8 et+ mauvais en rouge.

J'ai trouvé sur un autre sujet de quoi changer la couleur, en désactivant l'option "afficher la couleur lors du passage sur les champs" sinon le champ redevenait bleu quand on cliquait ailleurs.

if (this.getField("Text6").valueAsString!="") {event.target.fillColor = ["RGB", 0, 255, 0];
if (this.getField("Text6").value>=1) event.target.fillColor = ["RGB", 255, 255, 0];
if (this.getField("Text6").value>=3) event.target.fillColor = ["RGB", 237, 127, 16];
if (this.getField("Text6").value>=8) event.target.fillColor = ["RGB", 255, 0, 0];}


Problème: l'orange ne fonctionne pas
 :Euuuh:  les autres couleurs oui, je ne comprends pas pourquoi.

Ensuite comment insérer les commentaires? Dans le même script ou à part?

Auriez vous un exemple pour le "parfait en vert" ?

Merci de m'avoir lu.

IP archivée


bebarth  10 septembre 2020 : 18:42

bonjour,
En JavaScript, les valeurs RGB vont de 0 à 1 et non de 0 à 255.
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2Fcolor_properties.htm
Il faut donc écrire :
if (this.getField("Text6").valueAsString=="") {
    event.target.fillColor = ["RGB", 1, 1, 1];
    event.target.value="";
}if (this.getField("Text6").valueAsString!="") {
    event.target.fillColor = ["RGB", 0, 1, 0];
    event.target.value="Parfait";
}
if (this.getField("Text6").value>=1) {
    event.target.fillColor = ["RGB", 1, 1, 0];
    event.target.value="Bien";
}
if (this.getField("Text6").value>=3) {
    event.target.fillColor = ["RGB", 237/255, 127/255, 16/255];
    event.target.value="Moyen";
}
if (this.getField("Text6").value>=8) {
    event.target.fillColor = ["RGB", 1, 0, 0];
    event.target.value="Mauvais";
}
...et ça marche beaucoup mieux !!!
On place les textes à indiquer dans le même script.
@+
 :bonjour:

IP archivée


Minautore  10 septembre 2020 : 19:45

Merci beaucoup pour ta réponse claire et rapide. :bonjour:

Bonne soirée

IP archivée


Merlin  11 septembre 2020 : 09:24

En JavaScript, les valeurs RGB vont de 0 à 1 et non de 0 à 255.
Oui et non.
Utiliser une échelle de 255 valeurs comprise entre zéro et un n'est pas très pratique et pas du tout intuitif car aucun sélecteur de couleur ne donne ces valeurs, il faut les convertir à la mano à chaque fois.
Même si ça peut convenir dans le cas qui nous intéresse (couleur RVB "pleines").

Tout ça pour dire qu'on peut noter les couleurs de 0 à 255 sans se prendre la tête et en laissant JavaScript faire lui-même les conversions, et il ne faut pas non plus oublier d'utiliser "else" et les accolades :

if (this.getField("Text6").valueAsString!="") {event.target.fillColor = ["RGB", 0/255, 255/255, 0/255];}
else if (this.getField("Text6").value>=1) {event.target.fillColor = ["RGB", 255/255, 255/255, 0/255];}
else if (this.getField("Text6").value>=3) {event.target.fillColor = ["RGB", 237/255, 127/255, 16/255];}
else if (this.getField("Text6").value>=8) {event.target.fillColor = ["RGB", 255/255, 0/255, 0/255];}

IP archivée


Merlin  11 septembre 2020 : 09:34

Par ailleurs, je viens de m'apercevoir que les deux dernières conditions ne peuvent pas s'exécuter, aussi bien dans le script d'origine que dans celui de bebarth.
car >=3 et >=8 sont inclus dans >=1.

Il faudrait donc écrire les conditions dans l'ordre inverse :

if (this.getField("Text6").valueAsString!="") {event.target.fillColor = ["RGB", 0/255, 255/255, 0/255];}
else if (this.getField("Text6").value>=8) {event.target.fillColor = ["RGB", 255/255, 0/255, 0/255];}
else if (this.getField("Text6").value>=3) {event.target.fillColor = ["RGB", 237/255, 127/255, 16/255];}
else if (this.getField("Text6").value>=1) {event.target.fillColor = ["RGB", 255/255, 255/255, 0/255];}





IP archivée


Minautore  11 septembre 2020 : 14:35

Merci pour ton intervention.

Par contre le script de bebarth fonctionne correctement et celui que tu as posté reste vert quelque soit le scoring. Evidement je ne saurais te dire pourquoi, je suis trop novice en la matière.

Encore merci pour vos commentaires réactifs. :bravo:

IP archivée


bebarth  11 septembre 2020 : 15:14

bonjour,
Personnellement j'aurais écrit le script dans cet ordre, en indiquant les fractions que lorsque c'est nécessaires.
if (this.getField("Text6").value>=8) {
    event.target.fillColor=["RGB", 1, 0, 0];
    event.target.value="Mauvais";
} else if (this.getField("Text6").value>=3) {
    event.target.fillColor=["RGB", 237/255, 127/255, 16/255];
    event.target.value="Moyen";
} else if (this.getField("Text6").value>=1) {
    event.target.fillColor=["RGB", 1, 1, 0];
    event.target.value="Bien";
} else if (this.getField("Text6").valueAsString!="") {
    event.target.fillColor=["RGB", 0, 1, 0];
    event.target.value="Parfait";
} else {
    event.target.fillColor=["RGB", 1, 1, 1];
    event.target.value="";
}
@+
 :bonjour:

IP archivée


Merlin  12 septembre 2020 : 11:56

le script de bebarth fonctionne correctement et celui que tu as posté reste vert quelque soit le scoring
Je me suis concentré sur la syntaxe et l'ordre logique d'exécution, mais je n'ai rien testé.
 :joker:

IP archivée


Minautore  13 septembre 2020 : 00:36

Merci de vous être penché sur mon cas.


J'ai un autre soucis, c'est la mise en valeur de script.

La couleur et le commentaire sont sensés interpeller la personne qui relit le formulaire une fois rempli. C'est là où j'ai un soucis parce que si le champ prend bien la couleur à l'impression et avec la sauvegarde, celle ci ne reste pas à l'écran mais redevient bleu par défaut quand on clique ailleurs. Or l'utilisation du formulaire se fera quasiment tout le temps une seul fois sur l'écran lors du recueil des réponses. rarement en consultation ultérieure.
J'ai essayé toute les formes d'activation de script souris enfoncée, relâché, etc..... rien ne change

Si je désactive "afficher la couleur lors du passage sur les champs" cela fonctionne mais cela désactive aussi les autres champs, ce qui n'est pas pratique.

Est il possible de ne désactiver cette option seulement pour 1 cellule en particulier?

IP archivée


Merlin  13 septembre 2020 : 23:54

La couleur bleue c'est comme la petite cuillère dans Matrix : elle n'existe pas.  :geek:

Il s'agit de la couleur de surbrillance qui sert à mettre en évidence les champs de formulaire à remplir.
On peut l'activer/désactiver sur son poste via : Préférences : Formulaires : Couleur de surbrillance.

Ou bien pour un document en plaçant ce script en script de document :
app.runtimeHighlight = false;

Voir : https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/Acro12_MasterBook/JS_API_AcroJS/app_properties.htm?rhhlterm=highlight&rhsyns=%20#XREF_70509_runtimeHighlight
&
https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/

IP archivée


Minautore  14 septembre 2020 : 11:04

Ou bien pour un document en plaçant ce script en script de document :
app.runtimeHighlight = false;

Super! Merci à toi.
Le top aurait été de le faire pour un seul champ mais cette solution me va aussi . :Smiley01:

IP archivée


Merlin  14 septembre 2020 : 14:57

Le top aurait été de le faire pour un seul champ
Tout est possible avec JavaScript, mais c'est plus complexe car il faut réinventer la fonction (pour un seul champ…).

IP archivée