[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Interaktives Panel

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

Interaktives Panel

Uwe Laubender
Beiträge gesamt: 5316

21. Feb 2018, 13:20
Beitrag # 31 von 35
Beitrag ID: #562514
Bewertung:
(763 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,
hab' mal einen Kurztest mit Deinem Code und InDesign CC 2018 gestartet.
Bisher keine Abstürze. Auch nicht nach Schließen von irgendwelchen Layout-Windows.

Problem allerdings: Das Dialogfeld kann hinter den Anwendungsrahmen geraten.


als Antwort auf: [#562510]
X

Interaktives Panel

Stephan_M
Beiträge gesamt: 480

21. Feb 2018, 23:54
Beitrag # 32 von 35
Beitrag ID: #562517
Bewertung:
(736 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Uwe, für das Testen und den Hinweis daß es bei Dir läuft. Habe mich dadurch erst dran gemacht nach Außen zu schauen, zwei Plugins und drei Autostartskripte entfernt... am Ende war es Rorohikos "StoryParker", daß im Zusammenspiel mit dem Testskript Indesign reproduzierbar einfror. Schon komisch.

Jetzt kann ich weiter machen. Dein Abfangen/Umwandeln der Event-Error-Messages hat mir auch geholfen. Und jetzt teste ich mal parallel, ob's mit dem Idle-Task eh eine bessere Lösung wird.

Hast mir geholfen!

Herzliche Grüße,
Stephan


als Antwort auf: [#562514]

Interaktives Panel

Uwe Laubender
Beiträge gesamt: 5316

22. Feb 2018, 07:49
Beitrag # 33 von 35
Beitrag ID: #562519
Bewertung:
(719 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: … am Ende war es Rorohikos "StoryParker", daß im Zusammenspiel mit dem Testskript Indesign reproduzierbar einfror. Schon komisch. …


Aha!
Na, dann würde ich mal Kris Coppieters von Rorohiko davon unterrichten.


als Antwort auf: [#562517]

Interaktives Panel

Stephan_M
Beiträge gesamt: 480

22. Feb 2018, 21:11
Beitrag # 34 von 35
Beitrag ID: #562538
Bewertung:
(683 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mach ich.

Hier noch die schnelle rescourcenschonenden verquickung des 'idleTasks' mit 'afterSelectionChanged' ...

Wenn die Selection sich ändert geht eine Flagge hoch. Und beim ersten Leerlauf guckt der Eventhandler erstmal nach der Flagge ob's überhaupt eine Veränderung abzuarbeiten gab. Wenn sich die Selection also sehr schnell und häufig ändert, dann wird darauf frühestens beim nächsten Leerlauf reagiert. Das ist toll, bei z.B. Texteingaben (insertion points).

Danke dafür, Uwe!

Code
#targetengine miscellaneous 
var w = new Window ("palette { text: 'Test Palette', preferredSize: [220,16], alignChildren:['fill','top']}");

w.sText = w.add( "statictext", undefined, 'Tell Selection' );
w.sText.needs_update = new Boolean;

function getParas() {
if (app.documents.length == 0) {
return "No documents are open.";
}
else {
try {
var ad = app.activeDocument;
var s = app.selection;
}
catch(e) {
if(e.number == 90884 || e.number == 90886) {
return "Closed Window"
};
else {
return "Error: "+e.number +"\r"+ e.message
};
}
}
return (s.length == 0)?('Nothing selected'):(s[0].constructor.name);
}


function updateSel(event) {
if (w.sText.needs_update) {
w.sText.text = getParas();
w.graphics.backgroundColor = w.graphics.newBrush (w.graphics.BrushType.SOLID_COLOR, [Math.random(), Math.random(), Math.random()]); // to show when updateSel is called
w.sText.needs_update = false;
}
}

app.eventListeners.add("afterSelectionChanged", function (){w.sText.needs_update = true;},{name:'paraStyleChanger_selChange'});

app.idleTasks.add ({name : "paraStyleChanger_idleTask" , sleep : 1000 }).addEventListener( IdleEvent.ON_IDLE , updateSel , false);

w.onClose = function() {
app.idleTasks.itemByName('paraStyleChanger_idleTask').remove();
app.eventListeners.itemByName('paraStyleChanger_selChange').remove();
}
w.show();



als Antwort auf: [#562519]

Interaktives Panel

Uwe Laubender
Beiträge gesamt: 5316

23. Feb 2018, 10:10
Beitrag # 35 von 35
Beitrag ID: #562542
Bewertung:
(656 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,
kleine Anmerkung zu Deinen Skriptzeilen:

Du kannst die else-Ummantelung des folgenden Codes bei Deiner ersten if-Abfrage weglassen. Bei einem return wird der folgende Code nicht ausgeführt.

Ebenso innerhalb des catch(), da Du dort mit return "Closed Window" die folgenden Codeausführung unterdrückst.

Hab Dein Skript noch nicht laufen lassen.
Werde rückmelden, wenn mir noch was auffällt.


als Antwort auf: [#562538]
X