Connect failed: Connection timed out

[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Auf welche Seite wurde zuletzt geklickt?

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

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

5. Jan 2019, 18:07
Beitrag # 16 von 26
Beitrag ID: #568320
Bewertung:
(6982 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habe es gerade noch etwas anders gelöst:

Das erzeugte Rectangle bekommt irgendeinen kryptischen eindeutigen Namen, bevor ich es als IDMS exportiere. Darüber finde ich es auch nach dem Rückimport zuverlässig wieder.

Komisch, dass die PlaceGun einem das nicht automatisch als Wert zurückgibt.

Danke trotzdem :-)


als Antwort auf: [#568319]
X

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

5. Jan 2019, 18:13
Beitrag # 17 von 26
Beitrag ID: #568321
Bewertung:
(6980 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

so weit ich das verstanden habe, ist das Rechteck doch nur ein Hilfsmittel.

Deshalb würde ich es nur einmal exportieren und dann immer wieder laden.

Oder, wenn Du die Anzahl der zu platzieren Dateien im voraus kennst, könntest Du es gleich in ausreichender Zahl laden.

Dann müsstest Du aber tatsächlich den Namen oder das Label erst nach der Platzierung hinzufügen.

Aber ich habe wirklich keine Ahnung, was Du da genau machen willst.


als Antwort auf: [#568320]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

6. Jan 2019, 00:36
Beitrag # 18 von 26
Beitrag ID: #568323
Bewertung:
(6957 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Irgendwie habe ich geahnt, dass diese Listener-Nummer wieder komplizierter wird als erhofft.

Bei folgendem Code wird nur ausgegeben:
"Fertig mit Hauptprogramm"

Offensichtlich ist das Script nicht geeignet, in die mit afterPlace aufgerufene Funktion listenerTest zu gehen. Wäre dem so, sollte ja zumindest "Aufruf des weiteren Teils nach der Platzierung" ausgegeben werden.

Hat jemand eine Ahnung, was ich falsch gemacht habe?


Code
#target indesign-10 
#targetengine "mySession3"

var gO = {};

main();

function main() {
var newRect = app.activeWindow.activePage.rectangles.add();
newRect.name = "myRectangleForExportImport";
var rectFile = File("~/Desktop/rec.idms")
newRect.exportFile(ExportFormat.INDESIGN_SNIPPET, rectFile);
gO.placeGunListener = app.activeDocument.placeGuns.addEventListener("afterPlace", listenerTest);
app.activeDocument.placeGuns.loadPlaceGun(rectFile);
$.writeln("Fertig mit Hauptprogramm");
}

function listenerTest() {
$.writeln("Aufruf des weiteren Teils nach der Platzierung");
var myRect = app.activeDocument.pageItems.itemByName("myRectangleForExportImport");
if(myRect.isValid) {
$.writeln("PlaceGun wurde positioniert auf Seite " + app.selection[0].parentPage.name + " an Stelle x = " + app.selection[0].geometricBounds[1] + " / y = " + app.selection[0].geometricBounds[0]);
}
myRect.remove();
if(gO.placeGunListener.isValid) {
app.activeDocument.placeGuns.removeEventListener("afterPlace", listenerTest);
}
}



als Antwort auf: [#568321]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

6. Jan 2019, 07:21
Beitrag # 19 von 26
Beitrag ID: #568324
Bewertung:
(6935 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Peter,
Antwort auf: Hat jemand eine Ahnung, was ich falsch gemacht habe?


Ja ich! :-)
Du hast meine letzten Beiträge nicht gelesen.
Versuche es mal so:
Code
  
#target indesign-13
#targetengine "mySession"

placeGunTest = new PlaceGunTest();
// alert(placeGunTest);

/*Object*/function PlaceGunTest(){
var /*Rectangle*/newRect = app.activeWindow.activePage.rectangles.add(),
/*File*/rectFile = File("~/Desktop/rec.idms"),
/*EventListener*/placeGunListener = app.activeDocument.eventListeners.add("afterPlace", listenerTest);
newRect.exportFile(ExportFormat.INDESIGN_SNIPPET, rectFile);
app.activeDocument.placeGuns.loadPlaceGun(rectFile);
$.writeln("Constructor executed");

function listenerTest () {
$.writeln("Aufruf des weiteren Teils nach der Platzierung");
newRect = app.activeWindow.activePage.rectangles.add()
newRect.remove();
app.activeDocument.placeGuns.loadPlaceGun(rectFile);
// this.activePage = newRect.parentPage; // use this to get last parentPage outside of object in same session
$.writeln(
"Aufruf des weiteren Teils nach der Platzierung:\n" +
app.selection[0].parentPage.name + " an Stelle x = " +
app.selection[0].geometricBounds[1] + " / y = " +
app.selection[0].geometricBounds[0]
);
newRect.remove();
}
this.removeListener = function(){
if(placeGunListener != null)
placeGunListener.remove();
}
this.cleanUp = function(){
this.removeListener();
app.activeDocument.placeGuns.abortPlaceGun();
}
}
[b]// execute this AFTER getting Page or AFTER done whole work!
[b]/*
[b] placeGunTest.cleanUp();
[b] delete $.global.placeGunTest
*/



als Antwort auf: [#568323]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

6. Jan 2019, 09:47
Beitrag # 20 von 26
Beitrag ID: #568325
Bewertung:
(6922 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

"nicht gelesen" trifft es nicht, "nicht verstanden" war es leider :-)

Wenn ich Dein Script in einem frisch gestarteten ID in einem neuen Dokument laufen lasse, bekomme ich die Meldung:

"Ein angehängtes Script hat den folgenden Fehler verursacht:Die angeforderte Aktion konnte nicht ausgeführt werden, da das Objekt nicht mehr existiert. Möchten Sie diesen Ereignis-Handler deaktivieren?""

Weiterhin interessant ist der Ablauf:
- Das Script läuft im ersten Teil durch.
- Ich habe eine geladene PlaceGun, die ich positioniere.
- Es kommt im ID der Fehler, den ich wegclicke.
- Danach habe ich wieder eine geladene PlaceGun, die ich positinieren kann.
- Im Estk wird der Wert der ersten PlaceGun ausgegeben.
- Danach habe ich drei Rectangles auf der Seite, wo eigentlich keins mehr sein sollte.

Da ich den Aufbau nicht verstehe, wage ich mich auch nicht an die Fehlersuche.

Warum läuft denn bei Dir das Script korrekt?

Um den Sinn nocheinmal konkret zu formulieren: Ich möchte für den weiteren ABlauf im ID nur wissen, auf welcher Seite an welcher Position der Anwender geklickt hat. Die Rectangles brauche ich nicht.

Viele Grüße

Peter


als Antwort auf: [#568324]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

6. Jan 2019, 10:29
Beitrag # 21 von 26
Beitrag ID: #568326
Bewertung:
(6918 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Peter,

Antwort auf: Um den Sinn nocheinmal konkret zu formulieren: Ich möchte für den weiteren ABlauf im ID nur wissen, auf welcher Seite an welcher Position der Anwender geklickt hat.


So leid es mir tut, ich habe den weiteren Ablauf immer noch nicht begriffen!
Zuerst einmal, Thema dieses Feeds ist:
Auf welche Seite wurde zuletzt geklickt?
In Deinem Beispiel fragst Du aber auch die Position des Rechtecks ab.
Willst Du also nur die Seite, oder auch die genau Position wissen?
Wie willst Du das Ergebnis auswerten und weiterverarbeiten?
Zur Zeit gehe ich davon aus, dass Du eine ganze Reihe von Klicks auswerten willst, deshalb liefere ich ein Ergebnis und lade die PlaceGun neu und warte auf den nächsten Klick.
Dieses warten musst Du explizit durch den Aufruf der Methode cleanUp() beenden.
Auch das Beenden von InDesign räumt auf.
Antwort auf: "Ein angehängtes Script hat den folgenden Fehler verursacht:Die angeforderte Aktion konnte nicht ausgeführt werden, da das Objekt nicht mehr existiert. Möchten Sie diesen Ereignis-Handler deaktivieren?""


Bei mir passiert das nicht, das müssten wir dann mal im SingleStep-Verfahren und mit einem Errorhandler einkreisen. - Die Fehlermöglichkeiten sind beinahe unendlich groß und müssen gezielt abgefangen werden.
Ursache könnten die Voreinstellungen sein.
Antwort auf: Danach habe ich drei Rectangles auf der Seite, wo eigentlich keins mehr sein sollte.


Wie so oft in InDesign könnte es sein, dass der Eventhandler nach einer Platzierung mehrfach aufgerufen wird, in solch einem Fall muss der Eventhandler so etwas gezielt verhindern.
Um das Problem weiter einzukreisen wäre Deine InDesign-Datei hilfreich.
Außerdem sollten wir das Skript mit unterschiedlichen InDesign-Versionen prüfen.
Auf jeden Fall muss ich zuerst einmal den ganzen Ablauf Deiner Aufgabe verstehen.
Muss Dein Skript auf eine Anwenderaktion reagieren, oder benötigst Du nur eine sichere Methode der Erkennung, auf welcher Seite Du gerade stehst?
Im letzteren Fall würde doch eigentlich die parentPage der aktuellen Selektion ausreichen, oder?


als Antwort auf: [#568325]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

6. Jan 2019, 10:46
Beitrag # 22 von 26
Beitrag ID: #568327
Bewertung:
(6914 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

gerade habe ich gesehen, dass es tatsächlich noch einen Fehler bei Löschen des Rahmens gab.
Also noch einmal:
Code
  
#target indesign-13
#targetengine "mySession"

placeGunTest = new PlaceGunTest();
// alert(placeGunTest);

/*Object*/function PlaceGunTest(){
var /*Rectangle*/newRect = app.activeWindow.activePage.rectangles.add(),
/*File*/rectFile = File("~/Desktop/rec.idms"),
/*EventListener*/placeGunListener = app.activeDocument.eventListeners.add("afterPlace", listenerTest);
newRect.exportFile(ExportFormat.INDESIGN_SNIPPET, rectFile);
newRect.remove();
app.activeDocument.placeGuns.loadPlaceGun(rectFile);
$.writeln("Constructor executed");

function listenerTest () {
$.writeln("Aufruf des weiteren Teils nach der Platzierung");
app.activeDocument.placeGuns.loadPlaceGun(rectFile);
// this.activePage = newRect.parentPage; // use this to get last parentPage outside of object in same session
$.writeln(
"Aufruf des weiteren Teils nach der Platzierung:\n" +
app.selection[0].parentPage.name + " an Stelle x = " +
app.selection[0].geometricBounds[1] + " / y = " +
app.selection[0].geometricBounds[0]
);
}
this.removeListener = function(){
if(placeGunListener != null)
placeGunListener.remove();
}
this.cleanUp = function(){
this.removeListener();
app.activeDocument.placeGuns.abortPlaceGun();
}
}
// execute this AFTER getting Page!
/*
placeGunTest.cleanUp();
delete $.global.placeGunTest
*/



als Antwort auf: [#568325]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

6. Jan 2019, 11:24
Beitrag # 23 von 26
Beitrag ID: #568328
Bewertung:
(6906 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

für den Fall, dass parentPage reicht, könnte auch dies funktionieren:

Code
  
// AFTER_SELECTION_CHANGED
#target indesign-13
#targetengine "mySession"

afterSelectionChanged = new AfterSelectionChanged();

/*Object*/function AfterSelectionChanged(){
var/*EventListener*/ afterSelectionChangedListener = app.activeDocument.eventListeners.add("afterSelectionChanged", listenerTest);
this.page = null;
$.writeln("Constructor executed");

function listenerTest () {
if (app.selection.length > 0)
this.page = wpsGetParentPageOfObjectIfPossible(app.selection[0]);
else
this.page = null;
if (this.page != null){
$.writeln(
"Aufruf des weiteren Teils nach der Platzierung:\nSeite: " +
app.selection[0].parentPage.name
)
}
app.selection[0] = NothingEnum.NOTHING;
}
this.removeListener = function(){
if(afterSelectionChangedListener != null)
afterSelectionChangedListener.remove();
}
/*page*/function wpsGetParentPageOfObjectIfPossible(/*object*/o)
{
try
{
var /*String*/whatIsIt = null, /*Page*/parentPage = null;

if (o === undefined)
return null;
if (o === null)
return null;
if (!(o.isValid))
return null;

if ("parentPage" in o)
return o.parentPage;

parentPage = (("parentTextFrames" in o) && (o.parentTextFrames.length >0)) ? o.parentTextFrames[0].parentPage : null;

if (parentPage != null)
return parentPage;

while (o != null)
{
if ("parentPage" in o)
return o.parentPage;
var whatIsIt = o.constructor;
switch (whatIsIt) {
case Page : return o;
case Character : o = o.parentTextFrames[0]; break;
case Footnote :; // drop through
case Cell : o = o.insertionPoints[0].parentTextFrames[0]; break;
case Note : o = o.storyOffset.parentTextFrames[0]; break;
case XMLElement : if (o.insertionPoints[0] != null) { o = o.insertionPoints[0].parentTextFrames[0]; break; }
case Application : return null;
default: o = o.parent;
}
if (o == null) return null;
}
return o
}
catch (error)
{
alert(error.message + "\nin File: " + error.fileName + "\nZeile: " + error.line);
// throw error;
}
return null;
}
}
// execute this AFTER getting Page!
/*
afterSelectionChanged.removeListener();
delete $.global.removeListener
*/



als Antwort auf: [#568325]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

6. Jan 2019, 14:59
Beitrag # 24 von 26
Beitrag ID: #568331
Bewertung:
(6868 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank, dass Du Dir so eine Mühe machst.

1) Wenn ich das letzte Skript laufen lasse, wird im ESTK nie ausgegeben "Constructor executed". Also läuft die Funktion AfterSelectionChanged nie zu Ende.

2) Der PlaceGun-Handler ist danach immer aktiv.

3) Diesen Thread habe ich mit der Frage gestartet "Aufwelche Seite wurde zuletzt geclickt?". Durch eine Idee von Uwe bin ich da drauf gekommen, auch noch die Position des Clicks abzufragen.


Ich möchte nicht, dass anch jedem Positionieren das Script ausgeführt wird. Ich will nur nach Aufruf des Scripts ein weiteres Script aufrufen, dass mir auf der Seite an einer bestimmten Stelle ein Word-Doc positioniert. Mit diesem mache ich dann bestimmte Dinge:
- Doppelte Leerzeichen entfernen
- Richtige Gedankenstriche und Anführungszeichen einsetzen.
- Im Word-Doc eingebettete Bilder unembedden, an bestimmter Stelle abspeichern und an der ursprünglichen Stelle wieder einsetzen.
Alle letztgenannten Punkte funktionieren problemlos.

Durch Uwe bin ich darauf gekommen, dass ich das Word-Doc nicht nur auf einer bestimmten Seite sondern auch in einer bestimmten Spalte und mit einem definierten Versatz von oben beginnen lassen könnte.

Kurz gesagt brauche ich eine Funktion, die ich wahlweise aufrufen kann und die danach wieder deaktiviert wird. Als Ergebnis brauche ich diese Parameter:
- Seite
- x-Wert
- y-Wert

Den Rest mache ich dann weiter mit meinem Script.


als Antwort auf: [#568328]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

6. Jan 2019, 15:48
Beitrag # 25 von 26
Beitrag ID: #568332
Bewertung:
(6860 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

Antwort auf: 1) Wenn ich das letzte Skript laufen lasse, wird im ESTK nie ausgegeben "Constructor executed". Also läuft die Funktion AfterSelectionChanged nie zu Ende.


Kein Bug, sondern Feature!

Antwort auf: 2) Der PlaceGun-Handler ist danach immer aktiv.


Kein Bug, sondern Feature!

Ich ging davon aus, dass Du viele Dateien automatisch nacheinander abarbeiten woltest.
Aber offensichtlich willst Du nur immer eine Datei bearbeiten.
Ich denke, dass Du dafür eigentlich keinen Eventhandler benötigst, denn Du musst ja in diesem Fall jedesmal ein Skript starten.
Dennoch mache ich jetzt mal mit Deinem Ansatz weiter:
Code
  
#target indesign-13
#targetengine "mySession"

placeGunTest = new PlaceGunTest();
delete $.global.placeGunTest;

/*Object*/function PlaceGunTest(){
var /*Rectangle*/newRect = app.activeWindow.activePage.rectangles.add(),
/*File*/rectFile = File("~/Desktop/rec.idms"),
/*EventListener*/placeGunListener = app.activeDocument.eventListeners.add("afterPlace", listenerTest),
/*Object*/resultO = null;
newRect.exportFile(ExportFormat.INDESIGN_SNIPPET, rectFile);
newRect.remove();
app.activeDocument.placeGuns.loadPlaceGun(rectFile);

function listenerTest () {
resultO = {pageName: app.selection[0].parentPage.name, x: app.selection[0].geometricBounds[1], y: app.selection[0].geometricBounds[0]};
doThingsToDo(resultO);
cleanUp();
}
function removeListener(){
if(placeGunListener != null)
placeGunListener.remove();
}
function cleanUp(){
removeListener();
app.activeDocument.placeGuns.abortPlaceGun();
}
/*Void*/function doThingsToDo(/*Object*/resultO)
{
$.writeln(
"Aufruf des weiteren Teils nach der Platzierung:\nSeitennummer: " +
resultO.pageName + " an Stelle x = " + resultO.x + " / y = " + resultO.x
);
}
}


Ein Problem bleibt aus meiner Sicht übrig:
Das platzierte Objekt kann leider nicht im Listener gelöscht werden.


als Antwort auf: [#568331]

Auf welche Seite wurde zuletzt geklickt?

Uwe Laubender
Beiträge gesamt: 5316

10. Jan 2019, 20:44
Beitrag # 26 von 26
Beitrag ID: #568430
Bewertung:
(6580 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,
frisch aus dem amerkanischen InDesign-Scripting-Forum ein Beitrag zum Thema von Andreas Jansson:

When on a spread, ActivePage returns the page that is most exposed
Andreas Jansson Jan 10, 2019 3:00 PM
https://forums.adobe.com/...ge/10860810#10860810

Zitat According to the Object Model Viewer, LayoutWindow.activePage is said to return "The front-most page." I could not make any sense out of that sentence.

It seems to work this way:

When you are on a spread, activePage returns the page that is most exposed, including areas to the right or left. So if I have a two-sided spread, and zoom out to see the whole spread, with the spine in the middle of the screen, activePage returns the left page if I scroll an inch to the left (getting the spine to the right of the middle), and vice versa.

It doesn't matter whether I've selected an item on one of the pages. That does not matter when it concerns activePage. I was convinced that selections mattered, but obviously not and I realize I must have used this erroneous approach for many years. Will need to pick up the parent page of the selection instead.

Just informing about this, since it may be an easy mistake to make.

Thanks,
Andreas



als Antwort auf: [#568331]
X