2017-10-12 7 views
0

J'ai une boîte de dialogue qui permet à l'utilisateur de parcourir un fichier PSD, puis de rechercher plusieurs fichiers TIF. Lors de la recherche de plusieurs fichiers TIF, le texte de la boîte edittext est indéfini. Où, si je supprime simplement la possibilité de sélectionner plusieurs fichiers, cela fonctionne.Script de Photoshop; boîte de dialogue pour ouvrir plusieurs documents, mais obtenir "indéfini"

var dlg = new Window('dialog', 'PSD Creator', [100, 100, 500, 550]); 

dlg.pnl_browse = dlg.add('panel', [10, 10, 390, 150], 'Browse'); 
    dlg.pnl_browse.txt_staticPSD = dlg.pnl_browse.add('statictext' , [15, 10, 375, 30],'Select the project images folder:'); 
    dlg.pnl_browse.btn_browsePSD = dlg.pnl_browse.add ('button', [15, 35, 60, 60], '...'); 
    dlg.pnl_browse.txt_editPSD = dlg.pnl_browse.add('edittext' , [65, 35, 365, 55],'<Select the project images folder>'); 
    dlg.pnl_browse.txt_staticTIFF = dlg.pnl_browse.add('statictext' , [15, 70, 375, 90],'Select the folder where you TIFF images are:'); 
    dlg.pnl_browse.btn_browseTIFF = dlg.pnl_browse.add ('button', [15, 95, 60, 120], '...'); 
    dlg.pnl_browse.txt_editTIFF = dlg.pnl_browse.add('edittext' , [65, 95, 365, 120],'<Select the folder where you TIFF images are>');  

dlg.btn_ok = dlg.add ('button', [70,400,190,430], 'ok'); 
dlg.btn_cancel = dlg.add ('button', [210,400,320,430], 'cancel'); 


dlg.pnl_browse.btn_browsePSD.onClick = function() { 
    selectFilePSD = File.openDialog("Please select your template file.","*.psd"); 
     if(selectFilePSD != null) dlg.pnl_browse.txt_editPSD.text = decodeURI(selectFilePSD.fsName); 
} 


dlg.pnl_browse.btn_browseTIFF.onClick = function() { 
    selectFileTIFF = File.openDialog("Please select your tiff images.","*.TIF; *TFF", true); 
     if(selectFileTIFF != null) dlg.pnl_browse.txt_editTIFF.text = decodeURI(selectFileTIFF.fsName); 
}  

dlg.btn_ok.onClick = function() { 

     dlg.close() 
     open (selectFilePSD); 
     open (selectFileTIFF); 


} 

dlg.center(); 

dlg.show(); 
+0

Encore n'ont pas compris celui-ci. Je pense que c'est parce que je ne peux pas charger plusieurs fichiers directement. J'essaie actuellement de comprendre ce qu'est Array Buffer, en espérant que je suis sur la bonne voie. –

Répondre

0

On dirait que le problème est que vous devez avoir un tableau pour contenir les fichiers sélectionnés par l'utilisateur. Avec cette connaissance, le reste du code est retravaillé en conséquence. Différents cas ont été ajoutés pour réagir à différentes possibilités (que le tableau contienne ou non plusieurs valeurs) et ensuite il s'agissait simplement d'ouvrir tous les fichiers du tableau avec une boucle for! Espérons que cela aide:

var dlg = new Window('dialog', 'PSD Creator', [100, 100, 500, 550]); 
var selectFileTIFF = []; 

dlg.pnl_browse = dlg.add('panel', [10, 10, 390, 150], 'Browse'); 
    dlg.pnl_browse.txt_staticPSD = dlg.pnl_browse.add('statictext' , [15, 10, 375, 30],'Select the project images folder:'); 
    dlg.pnl_browse.btn_browsePSD = dlg.pnl_browse.add ('button', [15, 35, 60, 60], '...'); 
    dlg.pnl_browse.txt_editPSD = dlg.pnl_browse.add('edittext' , [65, 35, 365, 55],'<Select the project images folder>'); 
    dlg.pnl_browse.txt_staticTIFF = dlg.pnl_browse.add('statictext' , [15, 70, 375, 90],'Select the folder where you TIFF images are:'); 
    dlg.pnl_browse.btn_browseTIFF = dlg.pnl_browse.add ('button', [15, 95, 60, 120], '...'); 
    dlg.pnl_browse.txt_editTIFF = dlg.pnl_browse.add('edittext' , [65, 95, 365, 120],'<Select the folder where you TIFF images are>');  

dlg.btn_ok = dlg.add ('button', [70,400,190,430], 'ok'); 
dlg.btn_cancel = dlg.add ('button', [210,400,320,430], 'cancel'); 


dlg.pnl_browse.btn_browsePSD.onClick = function() { 
selectFilePSD = File.openDialog("Please select your template file.","*.psd"); 
     if(selectFilePSD != null) dlg.pnl_browse.txt_editPSD.text = decodeURI(selectFilePSD.fsName); 
} 


dlg.pnl_browse.btn_browseTIFF.onClick = function() { 
selectFileTIFF = File.openDialog("Please select your tiff images.","*.TIF; *TFF", true); 

    //selectFileTIFF is an array thus you must loop through each selected file 
    //you will need a String variable to appened the name of each file for your ScriptUI panel 
    if(selectFileTIFF.length != 0) { 
     if(selectFileTIFF.length > 1) { 
      dlg.pnl_browse.txt_editTIFF.text = selectFileTIFF.length + " items selected"; 
     } else { 
      dlg.pnl_browse.txt_editTIFF.text = decodeURI(selectFileTIFF[0].fsName); 
     } //end else 
    } //end if 
} //end func  

dlg.btn_ok.onClick = function() { 

     dlg.close() 
     open (selectFilePSD); 

     //must open each file is selectFileTIFF array 
     for (i = 0; i < selectFileTIFF.length; i++) { 
     open (selectFileTIFF[i]); 
     } 


} 

dlg.center(); 

dlg.show(); 
+0

Merci! Cela a fonctionné si bien! Je comprends tout ce que vous avez fait ici sauf "var selectFileTIFF = [];" Je ne comprends pas exactement ce que les crochets vides signifient ici. Est-ce que cela signifie que selectFileTIFF est un tableau vide? Et chaque élément dans le tableau est représenté par un nombre, alors selectFileTIFF [1] fait référence au deuxième élément dans le tableau? –

+0

Pas de problème! Et à peu près. La ligne 'var selectFileTIFF = [];' dit de créer un nouveau tableau pour moi ('= [];'), puis pointe sur le tableau avec 'selectFileTIFF'. De cette façon, lorsque vous allez stocker plusieurs fichiers dans la variable selectFileTIFF, il est déjà configuré pour être utilisé! Il y a une signification plus profonde qui a à voir avec les langues statiques et dynamiquement typées si vous voulez en savoir plus sur le sujet. Mais à la surface, vous pouvez penser à cette ligne comme étant juste la préparation de la variable afin qu'elle soit prête pour une utilisation correcte. –

+0

Si vous regardez, "comment créer un tableau en javascript," vous pouvez trouver une bien meilleure explication que ce que je viens de donner. –