Forums Développement Multimédia

Aller au contenu

- - - - -

Objet Window Javascript (dans Script pour Illustrator)

PAO Illustrator

2 réponses à ce sujet

#1 elle-ere

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 368 messages

Posté 08 November 2015 - 19:23 PM

Bonjour à tous,
Dans le document Javascript tools guide.pdf,
on trouve des exemples de mise ne œuvre de boîte de dialogue à partir d'une chaîne de caractères, ici res. (voi exemple ci dessous)
je voudrais connaître :
1 les avantages d'une t'elle pratique,
2 peut-on affecter une valeur par défaut à la propriété e.text à partir d'une variable, ici nom
à l'intérieur de la variable chaîne res ?
3 même question pour okBtn.onClick function().

Merci de bien vouloir me faire bénéficier de votre savoir en matière de programmation.

Mon but est de réaliser une boîte de dlg qui pourrait être appelée facilement (de manière élégante) plusieurs fois dans une boucle afin de répéter un traitement avec des paramètres différents jusqu'à l'abandon (bouton Cancel)

// JavaScript Document pour illustrator
var nom = "Votre nom";
var res =
"dialog { \<br /> info: Panel { orientation: 'column', \<br /> text: 'Personal Info', \<br /> name: Group { orientation: 'row', \<br /> s: StaticText { text:'Name:' }, \<br /> e: EditText { text:'Mon nom', active: false, characters: 30 } \<br /> }, \<br /> }, \<br /> buttons: Group { orientation: 'row', \<br /> okBtn: Button { text:'OK', properties:{name:'ok'} }, \<br /> cancelBtn: Button { text:'Cancel', properties:{name:'cancel'} } \<br /> } \<br /> }";
        win = new Window (res);
        win.buttons.okBtn.onClick = function()
        {
          nom = win.info.name.e.text; win.close(1);
        }
        win.buttons.cancelBtn.onClick = function () { win.close(2); };
        win.center();
        win.text = "Boîte à problèmes";
        win.info.name.e.text = nom;
        win.info.name.e.active = true;
        win.show();
        alert(nom);
 

J'ai inséré le code mais si des balises <br /> apparaissent il faudra les supprimer et les remplacer par un saut de ligne.

#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7012 messages

Posté 08 November 2015 - 22:20 PM

Salut,

Je ne sais pas trop comment s'utilisent ces modèles dans Illustrator, mais je peux te traduire le code si ça peut t'aider :


// JavaScript Document pour illustrator

var nom = "Votre nom";

// contenus de la boite
var res =
        dialog {
                info: Panel { // création d'un panel "infos"
                        orientation: 'column', // orientation du panel
                        text: 'Personal Info', // texte contenu dans panel
                        name: Group { // nouveau groupe "name"
                                orientation: 'row', // orientation du groupe   
                                s: StaticText { text:'Name:' }, // création d'un texte statique "s"
                                e: EditText { text:'Mon nom', active: false, characters: 30 } // création d'un texte modifiable "e"
                        },
                },
               
                // paramètres de boutons
                buttons: Group { // création d'un groupe de boutons
                        orientation: 'row', // orientation des boutons
                        okBtn: Button { text:'OK', properties:{name:'ok'} }, // création d'un bouton "ok"
                        cancelBtn: Button { text:'Cancel', properties:{name:'cancel'} }// création d'un bouton "cancel"
                }
        }
;

// crée la nouvelle boite ("res" passé en attribut)
win = new Window (res);

// actions du bouton "ok"
win.buttons.okBtn.onClick = function(){ // quand on clique sur le bouton "ok"
        nom = win.info.name.e.text; // enregistre le nom saisi dans la variable "nom"  
        win.close(1);// fermer la fenetre
}

// actions du bouton "cancel"
win.buttons.cancelBtn.onClick = function () { // quand on clique sur le bouton "cancel"
        win.close(2); // fermer la fenetre
};

// paramètres de base de boite
win.center(); // alignement            
win.text = "Boîte à problèmes";      // texte par défaut
win.info.name.e.text = nom;     // nom saisi
win.info.name.e.active = true;// ?
win.show();     // afficher la fenetre

// vérifier la valeur de la variable "nom"
alert(nom);

Attention, par souci esthétique j'ai supprimé les guillemets de la variable "res".

Pour répondre à tes questions :

Citation

1 les avantages d'une t'elle pratique,

Je pense que ça facilite la personnalisation d'éléments et permet de personnaliser l'interface.

Citation

2 peut-on affecter une valeur par défaut à la propriété e.text à partir d'une variable, ici nom
à l'intérieur de la variable chaîne res ?

Je ne suis pas sur d'avoir compris la question, mais je dirais qu'il te suffit de remplacer la variable "text" lors de la création de la boite de dialogue, ici :


// création d'un texte modifiable "e"
e: EditText { text:'Mon nom', active: false, characters: 30 }
 

Si je comprend bien, avec cette ligne on crée une nouvelle ligne de texte éditable, donc un texte de saisie, dont la valeur par défaut est

text:'Mon nom',

Il te suffit de remplacer ce texte brut par :

text:nom,

La variable "nom" que tu as définie en haut de ton script.

Citation

3 même question pour okBtn.onClick function().

Ce bouton sert à première vue à valider la saisie, donc enregistrer le nouveau nom saisi dans une variable que l'on va pouvoir réutiliser dans le programme, ici on se sert de la variable "nom" (on la réutilise) pour stocker le nom saisi. Par défaut cette variable à la valeur qui a été stockée dans :

text:'Mon nom',

C'est à peu près tout ce que je peux en dire, en espérant que ça puisse t'aider.

#3 elle-ere

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 368 messages

Posté 13 November 2015 - 21:16 PM

Bonjour à tous,
Merci Monsieur Spi pour cette réponse très rapide et claire, mais qui ne m'a malheureusement pas aidé.
La traduction n'est pas perdue, elle sera peut-être utile pour d'autres lecteurs,
le professeur doit travailler pour toute le classe...
Pour ma part, si je suis resté muet pendant tout ce temps, c'est parce que j'ai dû m'absenter
juste après avoir posté ce sujet, je m'en excuse.
Comme je l'ai déjà dit, je voudrais appeler une boîte de dialogue plusieurs fois dans une boucle
voir l'exemple qui suit, la chaîne "res" me paraissait intéressante pour ne pas avoir à tout redéfinir à chaque
passage dans la boucle.

Il me semblait également logique qu'il fallait utiliser text: nom, mais cela ne fonctionne pas la valeur retournée est NaN


e: EditText { text: nom, active: false, characters: 30 } \
 

on le constate si on désactive la ligne que j'ai appelée ligne 34.

J'aurais voulu intégrer les "méthodes" onClick associées aux différents boutons dans cette chaîne ??
Apparemment on ne peut définir que la structure de la boîte de dialogue mais pas la partie dynamique.

Le script qui suit est très simple cet juste pour accompagner mes propos, je voudrais utiliser une Boîte de dialogue plus élaborée.

// JavaScript Document
// prompt ----------------------
var nom = "Votre nom";
        do { nom = prompt('Personal Info',nom,'Boîte à problèmes');
                if (nom != null && nom != "") {
                  alert('Votre nom est : '+nom); //traitement
                }
   }
        while (nom != null)
//objet Window -----------------
var nom = "Votre nom";
var res =
"dialog { \<br />   info: Panel { orientation: 'column', \<br />   text: 'Personal Info', \<br />   name: Group { orientation: 'row', \<br />                   s: StaticText { text:'Name:' }, \<br />                   e: EditText { active: false, characters: 30 } \<br />                 }, \<br />   }, \<br />   buttons: Group { orientation: 'row', \<br />                         okBtn: Button { text:'OK', properties:{name:'ok'} }, \<br />                         cancelBtn: Button { text:'Cancel', properties:{name:'cancel'} } \<br />                   } \<br /> } \<br /> ";
        do {
          win = new Window (res);
          win.buttons.okBtn.onClick = function() {
                nom = win.info.name.e.text; win.close(1);
          }
          win.buttons.cancelBtn.onClick = function () { nom = null; win.close(2); };
          win.center();
          win.text = "Boîte à problèmes";
          win.info.name.e.text = nom; // ligne 34
          win.info.name.e.active = true;
          win.show();
                if (nom != null && nom != "") {
                  alert("Votre nom est : "+nom); //traitement
                }
   }
        while (nom != null)
 

J'ai inséré le code mais si des balises <br /> apparaissent il faudra les supprimer et les remplacer par un saut de ligne.

Remarque: ce script n'est pas spécifique à Illustrator puisque JAVASCRIPT TOOLS GUIDE.pdf appartient à ADOBE® CREATIVE SUITE® et CREATIVE CLOUD®



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP