在ScriptUI控件的窗口已经显示后更改该控件

Changing a ScriptUI control after its window is already shown

本文关键字:控件 显示 ScriptUI 窗口      更新时间:2023-12-05

所以这次我有一个(希望)简单的。我有一个用ExtendScript为Adobe InDesign CS6编程的ScriptUI窗口。它包含一个StaticText控件。在这个对话框窗口显示给用户之后,我想根据用户所做的一些操作来更改StaticText控件的文本。以下是我的问题的一个非常简化的版本:

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

在上面的例子中,"Hello"从未变为"Good night"。然而,我发现,如果我在这个窗口中添加一个进度条控件,并与StaticText控件一起定期更新它,它会允许文本更改,但如果第二行比原始文本长,文本就会被截断。

就好像StaticText控件的宽度是在创建时设置的,并且在显示其窗口后永远无法更改。如果这只是ScriptUI的一个限制,请告诉我,我会处理它。否则,请告诉我们我是否可以做些什么来动态更改StaticText,并接受更长的文本行而不被截断。谢谢

尝试将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"

这是我通常使用的结构[编辑:事实上,这表明它有点好]:

//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
}