ScriptUI-Photoshop-Paletten

Ich arbeite an einem Photoshop-Skript, das eine GUI zum Sammeln von Informationen enthält. Dies ist das erste Mal, dass ich die Skript-Benutzeroberfläche verwende, und ich stoße auf zwei Probleme, bei denen ich nicht sicher bin, wie ich sie angehen soll.

  1. Problem 1, die Palette ist nicht der Fokus, wenn ich mein Skript ausführe. Der Benutzer muss manuell auf die Palette klicken, um sie zu fokussieren und ihre Informationen einzugeben. Keine große Sache, aber ein zusätzlicher Schritt, den ich vermeiden möchte.
  2. Ich schreibe dieses Skript für mein Team bei der Arbeit, die meisten von uns haben mehrere Monitore mit unterschiedlicher Auflösung und Größe in verschiedenen Konfigurationen. Beim Testen stoße ich derzeit auf ein Problem (Problem 2), bei dem die Palette in der Mitte des primären Monitors angezeigt wird und nicht auf dem Monitor, auf dem sich das Photoshop-Fenster befindet (siehe beigefügte Screenshots). Gibt es eine Möglichkeit, dies zu ändern, sodass der Dialog über dem Photoshop-Fenster und nicht auf einem anderen Monitor angezeigt wird?Monitor 1-Ansicht Ansicht Monitor 2

Mein Code ist wie folgt:

    #target photoshop
    var isDone, sTID, waitForRedraw, win, windowResource;
    windowResource = "palette";
    win = new Window(windowResource);
    var oldInputGroup = win.add("group");
    oldInputGroup.add("statictext", undefined, "Search for");
        var oText = oldInputGroup.add("edittext", undefined, "Search for");
        oText.characters = 25;
        oText.active = true;
    var newInputGroup = win.add("group");
        newInputGroup.add("statictext", undefined, "Replace with");
        var nText = newInputGroup.add("edittext", undefined, "Replace with");
        nText.characters = 25;
        nText.active = false;
    var caseCheck = win.add("checkbox", undefined, "Case Sensitive?");
    var bottomGroup = win.add("group");
        var btnOK = bottomGroup.add("button", undefined, "OK");
        var btnCancel = bottomGroup.add("button", undefined, "Cancel");

    main();

Im Wesentlichen habe ich:

    isDone = false;

        win.onClose = function(){
            return isDone = true;
        };
        btnOK.onClick = function(){
            dataEntry = getInfo();
            return isDone = true;
        };
        btnCancel.onClick = function(){
            return isDone = true;
        };

        win.show();
        while (isDone === false) {
            try{
                app.refresh();
            } catch(e){
                isDone = true;
            };
        }
    //getInfo collects data from the window
    //then my script does its thing

Antworten (2)

Wenn meine Vermutung richtig ist, hat dies mehr mit allgemeinen Betriebssystemen und / oder Photoshop-Verhalten zu tun als nur mit Skriptui-Dialogen. Ich glaube, du hast zwei Möglichkeiten.

Option 1:

Machen Sie diesen zweiten Bildschirm zu Ihrem Hauptbildschirm in Mac, System Preferences > Displays > Arrangementindem Sie den weißen Balken auf einem der Displays auf das andere ziehen.


Option 2:

Aktivieren Sie "Anzeige hat separate Leerzeichen" in Mac System Preferences > Mission control> Displays have separate spacesKontrollkästchen.

Ich glaube, Sie haben das bereits aktiviert, aber wenn Sie die Anwendung auf dem gewünschten Bildschirm / Bereich haben, klicken Sie mit der rechten Maustaste auf das App-Symbol im Dock und wählen Sie unten oder Optionsden Bildschirm aus. Ich ziehe den Wortlaut aus dem Gedächtnis, aber wenn das nicht korrekt ist, ist es sowieso ziemlich selbsterklärend, sobald Sie es sehen.Assing to:Desktop on screen 2

Ich habe selbst eine Seltsamkeit dabei bemerkt, wo die Fensterplatzierung innerhalb des Bildschirms irgendwie falsch ist. Das ist für die meisten Fenster, wie zum Beispiel das PS-Einstellungsfenster, kein Problem, da Sie sie einfach verschieben können und das nächste Mal, wenn Sie dieses Fenster öffnen, es an derselben Stelle geöffnet wird.

Leider behalten Scriptui-Dialoge die letzte Position nicht bei (es sei denn, Sie erzwingen das vielleicht?). Ich erinnere mich, dass ich dieses Problem mit Dialogen hatte, die keinen festen Ort haben, also würden sie standardmäßig/normalerweise auf dem Bildschirm zentriert sein, aber manchmal bestehen sie einfach darauf, jedes Mal, wenn ich einen Dialog öffne, die rechte Seite des Bildschirms zu umarmen. Ich bin mir nicht sicher, ob das Festlegen eines statischen Speicherorts bei diesem Problem helfen würde. Aber zumindest werden sie auf dem sekundären Bildschirm einkaufen.


Es gibt noch eine Sache zu beachten. Für einige Leute ist diese Einstellung "Displays haben separate Leerzeichen" eine Art Kompromiss. Sie erhalten die Menüleiste auf jedem Bildschirm, separate Hintergründe, Vollbildbereiche sind für jeden Bildschirm separat und Sie können Probleme mit der Fensterposition wie folgt lösen, aber genau wie der Name der Einstellung andeutet, hat jeder Bildschirm seine eigenen Bereiche. Dies ist nicht unbedingt eine große Sache und kann tatsächlich ziemlich praktisch sein, aber viele sind an die Standardeinstellung gewöhnt, bei der alle Bildschirme zu jeder Zeit den gleichen Platz teilen.

Wenn Sie die anderen Vorteile dieser Einstellung nutzen möchten, sich aber nicht wirklich für die separaten Bereiche interessieren, können Sie TotalSpaces verwenden , um sie zu synchronisieren, wodurch im Wesentlichen sichergestellt wird, dass sich jeder Bildschirm jederzeit auf derselben Bereichsnummer befindet. Es hat ein Kontrollkästchen Preferences > Layoutnamens Sync spaces, das nur sichtbar ist, wenn "Anzeigen haben separate Leerzeichen" aktiviert ist.

Obwohl ich "Displays haben separate Bereiche" aktiviert habe, habe ich keine separaten Bereiche eingerichtet (effektiv befinden sich alle 3 meiner Monitore auf 1 Bereich). Ich bin zuversichtlich, dass die Mehrheit meines Teams dafür in einem ähnlichen Boot sitzt (alle Monitore in einem Bereich), daher bin ich mir nicht sicher, ob der Vorschlag für Bereiche für mein Team funktionieren wird - da ich sie ermutigen müsste, dies festzulegen nur für dieses Skript. Ich werde sehen, ob das Einrichten eines statischen Speicherorts für das Fenster verhindert, dass es auf einem anderen Monitor angezeigt wird. Einen Versuch wert!
@RyanWalker, ich verstehe nicht, warum es nicht funktionieren würde. Sie haben immer mindestens ein Leerzeichen. Und wenn die Einstellung aktiviert ist, haben Sie mindestens so viele Bereiche wie Bildschirme. Wenn Sie eine App im Vollbildmodus anzeigen, wird automatisch ein temporärer Vollbildbereich erstellt. Obwohl du recht hast. Da es sich um einen OS-Lvl-Fix handelt, muss jeder es so einrichten. Dafür können wir nur Apple oder Adobe verantwortlich machen. Es ist nicht Ihr Skript, das das Problem ist. Ob Sie das Problem mit dem Skript beheben könnten oder nicht ... Ich habe keine Ahnung.
Das Festlegen eines statischen Standorts hat das Monitorproblem nicht behoben - das Umschalten des Standardmonitors scheint gut funktioniert zu haben. Es könnte eine kleine Eingewöhnungszeit für mich sein, aber zumindest zeigt es sich jetzt an der erwarteten Stelle. Auf Vorschlag von Sergey wechselte ich auch zu dialogdem, was dem Fokusproblem helfen sollte. Ich fange an zu glauben, dass Sie an etwas dran sind, wenn Sie sagen, dass es möglicherweise keine Möglichkeit gibt, dieses Monitorproblem aus dem Skript heraus zu beheben.
@RyanWalker, es sollte keinen Grund geben, warum einer meiner Vorschläge nicht funktionieren würde. Ich glaube also nicht, dass Sie die primäre Anzeige ändern mussten, da Sie bereits die Einstellung „Anzeigen haben separate Leerzeichen“ aktiviert hatten. Das waren 2 verschiedene Lösungen, nicht Schritt 1 und Schritt 2.
@RyanWalker, vielleicht haben Sie den Dialog bereits fertig ... Aber falls Sie es nicht getan haben, habe ich heute meinen Scriptui Dialog Builder online gestellt, wenn Sie das überprüfen möchten. Es hat hier und da noch ein paar Schluckauf...
Oh Gott, das ist das Beste, was es je gab, Joonas! welche schwierigkeiten hat es?
@SergeyKritskiy, ich habe zwei, von denen ich weiß, dass sie gerade zu Github-Problemen hinzugefügt wurden. Sie finden das Github-Symbol unten links neben den grauen Feldern.
Ich habe meinen Dialog bereits fertig, aber ich werde ihn auf jeden Fall mit einem Lesezeichen versehen und in Zukunft verwenden! Danke, dass du Joonas geteilt hast!
  1. Haben Sie einen bestimmten Grund, warum Sie a paletteund nicht a verwenden möchten dialog? Ich finde Paletten in Photoshop sehr instabil, aber ich denke, Sie haben darüber gelesen.

  2. Wie Joonas erwähnte, behalten Scriptui-Fenster standardmäßig ihre Position nicht bei, aber Sie können win.locationvom win.onShowEreignis aus festlegen und den Ort beim Schließen des Fensters ( win.onClose) für die zukünftige Verwendung speichern

Dies ist mein erstes ScriptUI-Projekt und ich erinnere mich, dass es einen Grund gab, den ich gewählt habe paletteund nicht, dialogaber ich erinnere mich nicht, was dieser Grund war. Ich werde versuchen, meinen Code anzupassen, um zu sehen, ob das hilft, Problem (1) zu lösen, aber... ...das macht Problem 2 noch schwieriger. Wenn der Dialog auf einem anderen Monitor geöffnet wird und Sie den Rest der Anwendung nicht verwenden können, kann ich verstehen, dass der Rest meines Teams nicht weiß, warum ihr Photoshop eingefroren ist (wenn sie das Dialogfenster nicht finden können, dann effektiv ich haben ihre Bewerbung eingefroren).
dialogscheint das Fokusproblem behoben zu haben. Leider behebt das Aktualisieren der Eigenschaft win.location das Monitorproblem nicht. Dies scheint jedoch vorerst die ideale Lösung zu sein.
Um das Monitorproblem mit win.location zu beheben, müssen Sie die Koordinaten jedes Mal speichern, wenn der Benutzer das Fenster schließt, und diese Koordinaten dann verwenden, wenn das Fenster wieder angezeigt wird. Auf diese Weise sind die Koordinaten beim ersten Mal falsch, der Benutzer verschiebt das Fenster auf eine korrekte Anzeige, beim nächsten Mal befindet es sich an der richtigen Stelle.