[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: 35

21. Sep 2018, 20:44
Beitrag # 1 von 5
Bewertung:
(1558 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: 6242

22. Sep 2018, 11:40
Beitrag # 2 von 5
Beitrag ID: #566441
Bewertung:
(1530 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: 35

22. Sep 2018, 12:51
Beitrag # 3 von 5
Beitrag ID: #566444
Bewertung:
(1521 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: 6242

22. Sep 2018, 14:21
Beitrag # 4 von 5
Beitrag ID: #566445
Bewertung:
(1509 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: 35

22. Sep 2018, 14:37
Beitrag # 5 von 5
Beitrag ID: #566447
Bewertung:
(1504 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

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.11.2020 - 03.11.2020

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Montag, 02. Nov. 2020, 08.30 Uhr - Dienstag, 03. Nov. 2020, 17.00 Uhr

Kurs

Dieser Basic-Kurs ist der perfekte Einstieg in die Welt von InDesign, dem vielseitigen Layout-Programm. Sie lernen, wie InDesign aufgebaut ist, wie saubere Dokumente erstellt werden und wie man korrekt mit gelieferten InDesign-Projekten umgeht.

Preis: CHF 1'400.-
Dauer: 2 Tage

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/desktop-publishing/adobe-indesign-cc/kurs-indesign-cc-basic

Veranstaltungen
05.11.2020

Augmented Reality hat sich in den letzten Jahren rasant zu einer nachgefragten Technologie entwickelt.

Sitzungszimmer VSD in Bern - oder Online via ZOOM
Donnerstag, 05. Nov. 2020, 08.30 - 17.00 Uhr

Seminar

Print bietet ein haptisches Erlebnis und besticht noch immer durch seinen guten Ruf als Image-Träger. Und: Print kann mittels neuen Technologien wie Augmented Reality auch zum Türöffner in die digitale Welt werden, verschiedene Medien geschickt miteinander vernetzen und so ganz neue Perspektiven schaffen! Grundlagen und technologische Trends. Dieses Wissen ermöglicht Ihnen, spezielle Angebote und passende Produkte zu erschaffen für Ihre Kunden. Verpassen Sie nicht den Anschluss, investieren Sie ein wenig Zeit an diesem Tages-Seminar vom Donnerstag, 5. November 2020.

Aktuell planen wir dieses Seminar vor Ort - je nach Stand der Pandemie bieten wir dieses Seminar als ZOOM-Meeting Online an.

Ja

Organisator: publishingNETWORK und VSD

Kontaktinformation: René Theiler, E-Mailrene.theiler AT vsd DOT ch

https://www.vsd.ch/2020/10/01/seminar-augmented-reality-print-als-tueroeffner-in-die-digitale-welt/

Augmented Reality – Print als Türöffner in die digitale Welt

Neuste Foreneinträge


Erweiterungen in CC 2021 laufen nicht mehr

cPanel Datenbank Eintrag nicht möglich

Ich mochte E-Mail mit PHP senden

Formular / leere Options ausblenden

Farbeinstellungen zeigen falschen Einstellungsnamen

Bedingter Text

Hilfe: Text bei Absturz verschwunden, Endnoten noch da

Pages: geteilte Fußnoten

Alternativen zu Acrobat

Shortcut funktioniert nicht mehr
medienjobs