Donnez vie à vos documents numériques !
 

Permuter des champs

abracadabraPDF Forums PDF – Général Permuter des champs

  • Créateur
    Sujet
  • #71767
    michel c.
    Participant

    Bonjour, je souhaiterais savoir si il est possible de permuter des champs (pas le contenu des champs mais les champs eux même).

    Par exemple, dans le fichier joint (qui est un plan de salle), je souhaiterais :

    • que les listes déroulantes aient comme entrées de liste les valeurs saisies dans les champs (goto.1 à goto.32)

    • qu’en cliquant sur le bouton, les places qu’occupent les champs des 2 élèves sélectionnés permutent.

    Je ne sais pas encore comment m’y prendre avec les listes déroulantes pour qu’elles aient comme entrées de liste les valeurs saisies dans les champs (goto.1 à goto.32)

    Je suppose que c’est en utilisant la fonction setItems

    Merci

    Attachments:
    You must be logged in to view attached files.
Affichage de 11 réponses de 1 à 11 (sur un total de 11)
  • Auteur
    Réponses
  • #71769
    bebarth
    Maître des clés

    bonjour,
    Il suffit de permuter la propriété “rect” des 2 champs :
    var temp=this.getField("Ch1").rect;
    this.getField("Ch1").rect=this.getField("Ch2").rect;
    this.getField("Ch2").rect=temp;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71778
    michel c.
    Participant

    Merci pour la proposition.

    En fait, ce n’est pas les Champs Ch1 et Ch2 que je souhaite permuter mais goto.a et goto.b (les valeurs a et b dépendent des choix faits dans les champs Ch1 et Ch2).

    J’aimerais donc propulser les noms des élèves inscrits dans les champs goto.1 à goto.32 dans les listes Ch1 et Ch2 et avec pour valeur d’export les noms de champs (goto.1 à goto.32). → ça je ne sais pas faire, mais je vais continuer à chercher.

    Ensuite une fois les noms d’élèves à permuter sélectionnés, j’aimerais qu’en cliquant sur le bouton central, les champs goto.a et goto.b correspondant à ces élèves permutent (changent de place).

    Je viens de faire un essai non concluant, mais je vais continuer à tâtonner, je vais peut être y arriver.

    Merci

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    #71783
    michel c.
    Participant

    J’arrive à propulser les listes déroulantes avec les contenus des champs goto.1 à goto.32 mais sans les valeurs d’export (les noms des champs goto.1 à goto.32)

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    #71787
    bebarth
    Maître des clés

    bonjour,
    Si tu ne t’y connais pas trop en expression régulière, il vaut mieux écrire :
    var laListe=this.getField("liste00").value.split("\r");
    this.getField("Ch1").setItems(laListe);
    this.getField("Ch2").setItems(laListe);

    Ensuite, je ne comprends pas trop ce que tu veux faire vu que les 2 listes sont identiques !
    Admettons que tu ais “élève 3” dans le premier menu et “élève 5” dans le deuxième, que veux-tu faire ???

    @+
    😎

    #71795
    michel c.
    Participant

    Les menus servent à sélectionner les élèves que je souhaite permuter.

    La disposition des champs goto.1 à goto.32 est un plan de salle de classe.

    Donc si je sélectionne l’élève 1 dans la liste de gauche et l’élève 9 dans la liste de droite, et qu’ensuite je clique sur le bouton central, le champ goto.1 se retrouvera à l’emplacement du champ goto.9 et inversement.

    #71796
    bebarth
    Maître des clés

    bonjour,
    Voici un script qui devrait répondre à ta question :
    function eleve(nomChamp) {
    var eleve=this.getField(nomChamp).value;
    n=eleve.indexOf(" ");
    return eleve.substr(n+1);
    }
    eleveCh1=eleve("Ch1");
    eleveCh2=eleve("Ch2");
    var temp=this.getField("goto."+eleveCh1).rect;
    this.getField("goto."+eleveCh1).rect=this.getField("goto."+eleveCh2).rect;
    this.getField("goto."+eleveCh2).rect=temp;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71801
    michel c.
    Participant

    Merci, cela fonctionne. Par contre si je modifie les noms des élèves (les entrées saisies dans les champs goto.nn), cela ne fonctionne plus pour ces champs.

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    #71808
    bebarth
    Maître des clés

    …effectivement, je n’avais pas pensé à ça !!!
    Il faut donc regarder la position des menus déroulants, mais ici on ne ragarde uniquement que la position cela présume que la position des noms dans les champs “goto.1”, etc est identique à celle des menus déroulants, sinon il faudrait comparer les valeurs (menu et champs texte)
    var temp=this.getField("goto."+(this.getField("Ch1").currentValueIndices+1)).rect;
    this.getField("goto."+(this.getField("Ch1").currentValueIndices+1)).rect=this.getField("goto."+(this.getField("Ch2").currentValueIndices+1)).rect;
    this.getField("goto."+(this.getField("Ch2").currentValueIndices+1)).rect=temp;

    J’ai réduit le script au minimum. Demande si tu ne comprends pas !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71817
    michel c.
    Participant

    Merci beaucoup !

    Je ne comprends pas trop quelles informations il y a dans rect. A ce que je crois comprendre et après avoir lu deux trois trucs sur le net, c’est les coordonnées des 4 coins du champ en question?

    Autre truc que je crois avoir compris : currentValueIndices c’est la position des entrées dans le menu déroulant et on ajoute 1 car la numérotation commence à zero ?

    Dernière question : est il possible de se passer du bouton servant à générer les menus déroulants ? J’ai essayé en plaçant ce script en script de calcul pour chacun des champs Ch1 et Ch2 ça à l’air de marcher. La méthode est bonne ou y a-t-il mieux à faire ?

    Edit : Non en fait ça ne fonctionne pas, ça à l’air de fonctionner en mouse down par contre.

     

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 année et 5 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    #71829
    bebarth
    Maître des clés

    Je ne comprends pas trop quelles informations il y a dans rect. A ce que je crois comprendre et après avoir lu deux trois trucs sur le net, c’est les coordonnées des 4 coins du champ en question?

    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id602

    Autre truc que je crois avoir compris : currentValueIndices c’est la position des entrées dans le menu déroulant et on ajoute 1 car la numérotation commence à zero ?

    Exact ! Si tes champs goto avaient commencé à 0 il n’y aurait pas eu besoin d’ajouter +1.

    Dernière question : est il possible de se passer du bouton servant à générer les menus déroulants ? J’ai essayé en plaçant ce script en script de calcul pour chacun des champs Ch1 et Ch2 ça à l’air de marcher. La méthode est bonne ou y a-t-il mieux à faire ?

    On peut mettre un script d’action en souris entrée… Le même pour les 2 menus déroulants.
    var laListe=this.getField("liste00").value.split("\r");
    event.target.setItems(laListe);

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71846
    michel c.
    Participant

    Merci beaucoup, ça fonctionne nickel

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