Изменение элемента управления ScriptUI после того, как его окно уже показано

Так что у меня (надеюсь) простой на этот раз. У меня есть окно ScriptUI, запрограммированное в ExtendScript для Adobe InDesign CS6. Он содержит элемент управления StaticText. После того, как это диалоговое окно будет показано пользователю, я хотел бы изменить текст этого элемента управления StaticText на основе некоторых действий, предпринимаемых пользователем. Вот очень упрощенная версия моей проблемы:

var w = new Window("dialog");
    var t = w.add("statictext", undefined, "Hello");

w.show();

t.text = "Good evening";

В приведенном выше примере «Привет» никогда не меняется на «Добрый вечер». Однако я обнаружил, что если я добавлю в это окно элемент управления Progress Bar и периодически обновляю его вместе с элементом управления StaticText, он позволит изменить текст, но затем текст усекается, если вторая строка длиннее исходной. текст.

Как будто ширина элемента управления StaticText задается во время создания и никогда не может быть изменена после отображения его окна. Если это просто ограничение ScriptUI, просто дайте мне знать, и я разберусь с этим. В противном случае, пожалуйста, скажите мне, могу ли я что-нибудь сделать, чтобы этот StaticText динамически изменялся и принимал более длинные строки текста без усечения. Спасибо!


person Sturm    schedule 27.11.2013    source источник


Ответы (2)


Попробуйте установить multiline на true:

var w = new Window("dialog");
    var t = w.add("statictext", undefined, "Hello", {multiline:true});

w.show();

t.text = "Good evening";

Это должно предотвратить усечение текста после первой строки.

Вы можете проверить это, добавив возвращаемые символы (\r или \n) в текстовую строку:

t.text = "Good\revening"
person Justin Putney    schedule 28.11.2013
comment
Мне жаль, но это не так. Кроме того, я все равно не хочу, чтобы текст был многострочным. - person Sturm; 02.12.2013
comment
Единственным другим решением было бы сделать статический текст (и/или окно) шире, чтобы текст не выталкивался на вторую строку. - person Justin Putney; 03.12.2013
comment
Меня это не особо беспокоит. Перенос текста на вторую строку. Вторая линия никогда не создается. В моем реальном скрипте окно, содержащее эту строку текста, достаточно широкое; это просто ширина самого текста, которая остается фиксированной во время создания. Таким образом, остается много места слева и справа от текста, даже если более длинные строки текста усекаются, оставляя это пространство. Если мне удастся сделать снимок экрана, я опубликую его здесь, чтобы проиллюстрировать. - person Sturm; 03.12.2013

Это структура, которую я обычно использую [РЕДАКТИРОВАТЬ: На самом деле, это показывает ее немного лучше]:

//global:
var n=1;
//////////////////////////

function doTextChange(target, newText) {
    target.text = newText;
}

var win = new Window('dialog', 'dialog',[300,100,645,396]);
var w = buildUI();
if (w != null) {
    w.show();
}

function buildUI() {
    if (win != null) {
         win.t = win.add("statictext", [14,15,314,37], "Hello");
         win.closeBtn = win.add('button', [240,210,320,232], 'Close', {name:'Cancel'});
         win.changeBtn = win.add('button', [240,210+33,320,232+33], 'Change', {name:'Cancel'});
         win.closeBtn.onClick = function () { this.parent.close(1) };
         win.changeBtn.onClick = function () { n++;doTextChange(  win.t, "Good evening " + n);};
    }
    return win
}
person CRGreen    schedule 28.12.2013
comment
Сейчас я работаю над другим проектом, но скоро вернусь к этому. Мне особенно нужно сначала обернуть голову вокруг вашего кода. - person Sturm; 03.01.2014