2016-09-09 2 views
1

У меня есть javascript, который проходит через список слоев в Adobe Illustrator и изменяет имя на основе ввода пользователем.установить фокус редактирования текста в extendscript

Для ввода введите 2 'edittext' текстовые поля, первое - имя, которое вы хотите найти, а второе - это тот, который вы хотите заменить. Скрипт работает, однако я бы хотел, чтобы первое текстовое поле было сфокусировано при запуске скрипта, поэтому пользователь запускается в первом текстовом поле и может перейти во второй.

Также я хотел бы, чтобы моя кнопка отправки запускалась, когда нажата кнопка «Ввод», чтобы сделать ее быстрее.

Я использую Adobe ExtendScript TK с 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); 
    } 

ответ

1

Это должно вас заставить. Текст редактирования имеет свойство active. Если установлено значение true, у него есть фокус. И ключ делается через Eventlistener.

Но:

- строго говоря, не проблема ScriptUI: в After Effects и в Illustrator, больше не могут быть использованы eventlisteners: .addEventListener() не работает.
из 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 (); 

Испытано в ESTK 4.0.0.1 на MacOS 10.11.6

+0

Работал как шарм, спасибо! –

+0

Можете ли вы перенести мой вопрос, чтобы я мог получить репутацию? –

Смежные вопросы