2016-09-09 2 views
1

Ich habe ein Javascript, das durch die Ebenen-Liste in Adobe Illustrator geht und ändert den Namen auf der Grundlage der Eingabe durch den Benutzer.Set Fokus von Text bearbeiten in ExtendedScript

Es gibt 2 'editiertext' Textfelder für die Eingabe, der erste ist der Name, den Sie suchen möchten, und der zweite ist derjenige, den Sie ersetzen möchten. Das Skript funktioniert, allerdings möchte ich beim Start des Skripts das erste Textfeld aktiviert haben, damit der Benutzer mit dem ersten Textfeld startet und mit dem zweiten Textfeld fortfahren kann.

Ich möchte auch meine Submit-Taste laufen lassen, wenn die "Enter" -Taste gedrückt wird, um es schneller zu machen.

Ich verwende Adobe ExtendScript TK mit Adobe Illustrator CS6.

#target illustrator 
#targetengine main 

// JavaScript Document 
function renameText(searchText, replaceText) { 
    if (app.documents.length == 0) return; 
    var docRef = app.activeDocument; 
    recurseLayers(searchText, replaceText, docRef.layers); 
} 


function recurseLayers(searchText, replaceText, objArray) { 
    try { 
     $.writeln("Layer length: " + objArray.length); 
     for (var i = 0; i < objArray.length; i++) { 
      if (objArray[i].visible == true && objArray[i].locked == false) { 

       //var searchtext = "/\s*" + searchText + "\s*\d*/"; 
       objArray[i].name = objArray[i].name.replace(searchText, replaceText); 

        if (objArray[i].layers.length > 0) { 
         recurseLayers(searchText, replaceText, objArray[i].layers); 
        } 
      } 
      } 
     } catch (e) { 
      logger(e); 
    } 
} 


startGUI(); 

function startGUI() { 

     var win = new Window("dialog", "Replace Layer name", undefined); 

     win.orientation = "column"; 
     win.alignChildren = ["fill", "fill"]; 

     // Search 
     var searchGrp = win.add("panel", undefined, "Search and Replace"); 
     searchGrp.orientation = "column"; 
     searchGrp.alignChildren = ["fill", "fill"]; 

     var titleMsgS = searchGrp.add("statictext", undefined, "Layer name to search:"); 
     var searchText = searchGrp.add("edittext { characters: 1, justify: 'center', active: true }"); 
     searchTest.setFocus(); 

     searchText.helpTip = "Input layer name to replace"; 

     var titleMsgR = searchGrp.add("statictext", undefined, "Layer name to replace with:"); 
     var replaceText = searchGrp.add("edittext { characters: 1, justify: 'center', active: true }"); 
     replaceText.helpTip = "Input layer name to replace with"; 

     // Replace button 
     var replaceBtn = searchGrp.add("button", undefined, "Replace"); 
     replaceBtn.helpTip = "Replace layer name"; 
     replaceBtn.onClick = function() { 
       renameText(searchText.text, replaceText.text); 
       app.redraw(); 
     } 

     // Close button 
     var quitBtn = win.add("button", undefined, "Close"); 
     quitBtn.helpTip = "Press Esc to Close"; 

     // Event listener for the quit button 
     quitBtn.onClick = function() { 
      win.close(); 
     } 

     // Centering & Show Window 
     win.center(); 
     win.show(); 
} 


    // Prints stack trace 
    function logger(e) { 
     var errorMsg = ""; 

     errorMsg = errorMsg.concat("An error has occured:\n", e.line, "\n", e.message, "\n", e.stack); 
     $.writeln(errorMsg); 
    } 

Antwort

1

Das sollte dich gehen. Der Bearbeitungstext hat eine Eigenschaft active. Wenn es auf "True" gesetzt ist, hat es den Fokus. Und der Schlüssel ist über eine Eventlistener getan.

Aber:

- nicht unbedingt ein ScriptUI Problem zu sprechen: in After Effects und in Illustrator können Ereignis-Listenern nicht mehr verwendet werden: .addEventListener() funktioniert nicht.
von ScriptUI for dummies || kahrel.plus.com/indesign/scriptui.html

var win = new Window ("dialog"); 
var etext1 = win.add ("edittext", undefined, "foo"); 
var etext2 = win.add ("edittext", undefined, "bah"); 
win.add ("button", undefined, "OK"); 
win.add ("button", undefined, "Cancel"); 
etext1.active = true; 
win.addEventListener ("keydown", function (kd) {pressed (kd)}); 
function pressed (k) { 
if(k.keyName === "Enter"){ 
    $.writeln("You pressed " + k.keyName); 
    } 
} 
win.show (); 

in ESTK Getestet 4.0.0.1 auf macOS 10.11.6

+0

Arbeitete wie ein Charme, danke! –

+0

Können Sie meine Frage upvote, damit ich Rep erhalten kann? –