2016-08-01 66 views
0

In meinem Skript für Photoshop CC 2015 (Windows 10), in JavaScript geschrieben, verarbeite ich alle Ebenen des aktiven Dokuments in einem Schleife und möchte in jedem Schritt ein Setup-Dialogfeld anzeigen.Photoshop ScriptUI: Zeige ein Dialogfenster, schließe es, zeige es wieder an gibt ein leeres Vollbildfenster

Nehmen Sie zur Vereinfachung das folgende Arbeitsbeispiel. Das Fenster ist außerhalb der Schleife definiert, und unter anderen Schritten, die hier ausgezogen sind, wird das Fenster einmal jeden Schritt in der Schleife gezeigt: mit nur einem „OK“

#target photoshop 

var w = new Window('dialog', 'Title'); 
var b = w.add('button', undefined, 'OK'); 

for (var i = 0; i < 3; i++) { 
    // other code 
    w.show(); 
    // other code 
} 

Wenn Sie führen Sie es aus, ein kleines Dialogfenster Die Schaltfläche erscheint wie erwartet. Sie können es mit der Schaltfläche "OK" schließen. Aber jede fortlaufende w.show() erzeugt ein leeres Fenster, das fast den gesamten Bildschirm füllt, ohne irgendwelche Kontrollen. Es kann nur mit der ESC-Taste geschlossen werden.

Ich habe versucht, die b.onClick Ereignis überschreiben und manuell close() aufrufen, aber das hat nichts geändert.

Bei näherer Betrachtung des w Variable, ist es offensichtlich, dass die bounds bzw. location und size irgendwie verändert wurden. Ich habe versucht, diese Werte auf ihren vorherigen Zustand zurückzusetzen, und die Fenstergröße wird wiederhergestellt. Der Button ist jedoch immer noch nicht sichtbar.

Fehle ich etwas? Wie kann ich das Dialogfenster mehr als einmal richtig angezeigt bekommen?

Antwort

1

versuchen diesen Code, es funktioniert für mich mit Photoshop CC + OSX.

w.close() zerstören Dialogfeld, so sollten Sie erneut erstellen.

Drücken Sie eine Taste mit dem Namen "OK", drücken Sie die Eingabetaste sind die gleichen wie w.close().

#target 'photoshop' 
 

 
for (var i = 0; i < 3; i++) { 
 
    var w = W(); 
 
    $.writeln(w.show()); 
 
} 
 

 
function W() { 
 
    var w = new Window('dialog', 'Title'); 
 
    var b = w.add('button', undefined, 'OK', {name:'ok'}); 
 
    return w 
 
}

+0

Vielen Dank! Es klappt! Ich wusste nicht, dass 'close()' das Fenster zerstört. – Flo

+0

Tatsächlich habe ich in den offiziellen Handbüchern oder anderen Quellen keinen Hinweis darauf gefunden. Dies sollte hinzugefügt werden ... – Flo