[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Korrektes Schließen von ScriptUI Dialogen?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Korrektes Schließen von ScriptUI Dialogen?

JeT
Beiträge gesamt: 34

21. Sep 2018, 20:44
Beitrag # 1 von 5
Bewertung:
(236 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich komm gerade nicht klar – ich bastel an einem Script, was mir u. a. ermöglicht eine ausgewählte Verknüpfung zu verschieben.

Problem: Das Relinken nach dem Verschieben klappt nicht, weil InDesign den Dialog anscheinend nicht korrekt zu schließen scheint:

Zitat Fehler: Die Anforderung kann nicht bearbeitet werden, da ein modales Dialogfeld oder eine modale Warnmeldung aktiv ist.


Ich könnte jetzt Window("palette") nutzen – das ist aber eigentlich nicht das, was ich will.


Hat jemand eine Idee?



Hier eine aufs nötigste reduzierte Variante:

Code
(function() { 
var gDoc = app.activeDocument;

if ((gDoc.allGraphics.length != 0) && (app.selection.length == 1)) {
switch (app.selection[0].constructor.name) {
case "Rectangle":
case "Oval":
case "Polygon":
if (app.selection[0].graphics.length != 0){
var cLink = app.selection[0].graphics.item(0).itemLink;
}
break;
case "Image":
case "EPS":
case "PDF":
var cLink = app.selection[0].itemLink;
break;
}
}

dialog(cLink);

function dialog(cLink) {
var dialog = new Window("dialog", "Verknüpfung verwalten");
var moveButton = dialog.add('button {text: "Datei zur indd verschieben..."}');
moveButton.onClick = function () { dialog.close(); moveLink(cLink); }

dialog.show();
}

function moveLink (cLink) {
if (cLink.status != LinkStatus.NORMAL) return;
if (gDoc.saved == true) var targetFolder = gDoc.filePath;
else {
var targetFolder = Folder(Folder.desktop).selectDlg();
if (targetFolder == null) exit();
}

var newFile = File(targetFolder.fsName+"/"+cLink.name);
if (!newFile.exists){
var cFile = File(cLink.filePath);
var copyMe = cFile.copy(newFile);
if (copyMe == true) {
try { cLink.relink(newFile); } catch(e) { alert(e); }
// cFile.remove();
}
} else { alert("Die Verknüpfung gibt es am Zielort bereits!\n-> keine Änderung"); }
}
})();



Grüße
Jens



Heute ist nicht aller Tage, ich komme wieder, keine Frage!
X

Korrektes Schließen von ScriptUI Dialogen?

Gerald Singelmann
  
Beiträge gesamt: 6193

22. Sep 2018, 11:40
Beitrag # 2 von 5
Beitrag ID: #566441
Bewertung:
(208 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Aus der Dokumentation im OMV:
Zitat Window.close(return:Any)
ScriptUI Classes
Closes this Window
If an onClose() callback is defined for the window, calls that function before closing the window.
return (optional:
A number (?) to be returned from the show() method that invoked this window as a modal dialog.


Mit anderen Worten: Mit show() geht's in den modalen Modus. Mit dem Befehl direkt nach show() bekommt das Script wieder die Kontrolle. Dazwischen steht die Bearbeitung des InDesign-Dokuments still. Nichts machbar. Es sei denn, man nimmt eine palette statt eines dialogs, denn die ist nicht modal.

Mit noch anderen Worten: Wir müssten wissen, wieso der folgende Ansatz nicht reicht, um zu beurteilen, wie eine Lösung aussehen kann
Code
function() { 
var doc = app.activeDocument;
var clink = fetch_link( app.selection );

if( confirm( "Got Link\rWanna move the link?" ) ) {
move_link( clink );
}

function fetch_link( obj_array ) {
// do something to extract link from array
return link;
}
function move_link( link ) {
// move the link
}
}



als Antwort auf: [#566435]

Korrektes Schließen von ScriptUI Dialogen?

JeT
Beiträge gesamt: 34

22. Sep 2018, 12:51
Beitrag # 3 von 5
Beitrag ID: #566444
Bewertung:
(199 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

danke für deinen Tipp.


Mit folgender Anpassung konnte ich es jetzt lösen:

Zitat var move = false;
moveButton.onClick = function () { move = true; dialog.close(); }

dialog.show();
if (move == true) moveLink(cLink);



Grüße
Jens



Heute ist nicht aller Tage, ich komme wieder, keine Frage!


als Antwort auf: [#566441]
(Dieser Beitrag wurde von JeT am 22. Sep 2018, 12:52 geändert)

Korrektes Schließen von ScriptUI Dialogen?

Gerald Singelmann
  
Beiträge gesamt: 6193

22. Sep 2018, 14:21
Beitrag # 4 von 5
Beitrag ID: #566445
Bewertung:
(187 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
globale Variablen sind sehr selten nicht böse.

Besser also:
Code
moveButton.onClick = function() { dialog.close(true) } 
dontMoveButton.onClick = function() {dialog.close(false); }

if ( dialog.show() ) move();



als Antwort auf: [#566444]

Korrektes Schließen von ScriptUI Dialogen?

JeT
Beiträge gesamt: 34

22. Sep 2018, 14:37
Beitrag # 5 von 5
Beitrag ID: #566447
Bewertung:
(182 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: globale Variablen sind sehr selten nicht böse.


Wieso global? Ist doch im dialog()-Scope? Oder verstehe ich da was falsch?


Abgesehen davon, brauche ich die Unterscheidung, welcher Button jetzt angeklickt wurde – mein komplettes Script hat noch einige andere Funktionen und Buttons (umbenennen, neu verlinken etc).

Habe hier nur einen Auszug, das mein Problem reproduzierbar machte...


Grüße
Jens



Heute ist nicht aller Tage, ich komme wieder, keine Frage!


als Antwort auf: [#566445]
X
Hier Klicken

Aktuell

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
25.10.2018

Hamburg
Donnerstag, 25. Okt. 2018, 10.39 Uhr

Seminar

Viele Funktionen, für die früher Illustrator benötigt wurde, finden sich heute auch in InDesign. Angefangen bei den Pfadwerkzeugen, mit denen sich Linien und Bezier-Pfade zeichnen lassen, über die regulären Zeichenwerkzeuge für Rahmen und Linien bis hin zum Pathfinder, der Vektorobjekte zerschneiden, verbinden und kombinieren kann: InDesign bietet eine Vielzahl von Vektorgrafik-Werkzeugen, mit denen sich auch komplexe Vektorgrafiken erstellen lassen.

München, Donnerstag, 25.10.2018, Seminargebühr 415,31 (inkl. 19% MwSt), 9.30 Uhr bis 17.30 Uhr

Ja

Organisator: Cleverprinting

Vektorgrafik mit Adobe InDesign und Illustrator
Veranstaltungen
25.10.2018

Schule für Gestaltung Zürich
Donnerstag, 25. Okt. 2018, 17.00 - 19.30 Uhr

Seminar

Folgenden Fragen gehe ich – gemeinsam mit Ihnen – während des Seminars auf den Grund: – Sind heutige Farbsysteme auf crossmediale Ausgaben ausgerichtet? – Wie definiert man Farben für den Einsatz in Office- und Direktmarketing-Softwaren? – Welche Farb-Definitionen muss ein heutiges, crossmediales Corporate-Design beinhalten? – Braucht es dazu neue Systeme und Workflows? – Existieren Hilfsmittel für den crossmedialen Datenaustausch (freieFarbe)? – Ist CMYK in heutigen digitalen Produktionen noch sinnvoll und von Vorteil? – Was ist qualitativ besser – verfahrensangepasst oder ausgabeneutral?

Donnerstag, 25. Oktober 2018, von 17.00 Uhr bis 19.30 Uhr
mit anschliessendem Apéro

viscom-Mitglied: Kostenlos
Nichtmitglied: CHF 250.00, zuzüglich MwSt.

Ja

Organisator: viscom

http://www.viscom.ch/?name=agenda&veranstaltungid=854&datum=25.10.2018&suche=1