Donnez vie à vos documents numériques !
 

Changement de texte et de couleur en fonction d’un champ EDIT:(police modifiée)

abracadabraPDF Forums PDF – Général Changement de texte et de couleur en fonction d’un champ EDIT:(police modifiée)

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46403
    Minautore
    Membre

    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.

11 réponses de 1 à 11 (sur un total de 11)
  • Auteur
    Réponses
  • #68038
    bebarth
    Maître des clés

    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 :

    Code:
    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:

    #68039
    Minautore
    Membre

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

    Bonne soirée

    #68040
    Merlin
    Maître des clés

    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];}

    #68041
    Merlin
    Maître des clés

    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];}

    #68042
    Minautore
    Membre

    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:

    #68043
    bebarth
    Maître des clés

    bonjour,
    Personnellement j’aurais écrit le script dans cet ordre, en indiquant les fractions que lorsque c’est nécessaires.

    Code:
    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:

    #68044
    Merlin
    Maître des clés

    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:

    #68045
    Minautore
    Membre

    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?

    #68046
    Merlin
    Maître des clés

    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/

    #68047
    Minautore
    Membre

    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:

    #68048
    Merlin
    Maître des clés

    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…).

11 réponses de 1 à 11 (sur un total de 11)
  • Vous devez être connecté pour répondre à ce sujet.