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

4. Jan 2019, 15:12
Beitrag # 1 von 26
Bewertung:
(5141 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo HDS,

ich habe ein Script erstellt, dass mir Texte aus einer Word-Datei positioniert und anhand den Spaltenvorgaben der aktuellen Seiten als einzelne miteinander verketteten Textblöcke positioniert. So weit, so schön ...

Allerdings greife ich die Seite, auf der mit dem Positionieren angefangen werden soll, über app.activeWindow.activePage ab, was zu keinem befriedigenden Ergebnis führt, da ID und ich unterschiedliche Ansichten über das Thema haben.

Mir wäre es am liebsten, dass ich mit der Maus auf eine beliebige Seite klicke und das Script dann dort startet. Derzeit ist es so, dass ID die Seite nimmt, die (frei übersetzt) am "meisten vorne" ist. Auch mit rechts und links gibt es Probleme.

Nun die Frage: Gibt es einen Eventhandler oder ähnliches, über dessen Eigenschaften/Funktionen man den letzten Klick abfragen kann?

Fragt sich und Euch ...

Peter
X

Auf welche Seite wurde zuletzt geklickt?

Uwe Laubender
Beiträge gesamt: 5316

4. Jan 2019, 15:37
Beitrag # 2 von 26
Beitrag ID: #568300
Bewertung:
(5125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,
Idee:

Das Skript erstellt temporär einen Rechteckrahmen, der als IDMS-Datei exportiert wird und anschließend in die Placegun geladen wird. Klickst Du nun auf eine Seite wird dort der Rahmen erstellt. Die Seite ist direkt auslesbar über app.selection[0].parentPage.


als Antwort auf: [#568297]

Auf welche Seite wurde zuletzt geklickt?

Martin Fischer
  
Beiträge gesamt: 12779

4. Jan 2019, 16:22
Beitrag # 3 von 26
Beitrag ID: #568301
Bewertung:
(5109 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Antwort auf: Das Skript erstellt temporär einen Rechteckrahmen, der als IDMS-Datei exportiert wird und anschließend in die Placegun geladen wird.


Coole Idee!
Im Prinzip kann der Text der Worddatei gleich da rein importiert werden.
Das behalte ich mir im Hinterkopf.

IDMS scheint heute Dein Thema zu sein. Smile


als Antwort auf: [#568300]
(Dieser Beitrag wurde von Martin Fischer am 4. Jan 2019, 16:28 geändert)

Auf welche Seite wurde zuletzt geklickt?

Uwe Laubender
Beiträge gesamt: 5316

4. Jan 2019, 16:29
Beitrag # 4 von 26
Beitrag ID: #568302
Bewertung:
(5102 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Genausogut könntest Du als Auswahlwerkzeug das Seitenwerkzeug nehmen.
app.selection[0] gibt dann die ausgewählte Seite zurück.

Falls Du auf einer Auswahl der Seite im Seitenmenü bestehst, dann schau' Dir mal meine Beiträge zum Thema im amerikanischen InDesign-Scripting-Forum an:

Correct Answer 6. Re: active page vs selected page
Laubender Jan 15, 2017 4:54 PM (in response to Laubender)
https://forums.adobe.com/message/9264014#9264014

Mit InDesign CS6, und nur mit CS6, gibt's eine saubere Lösung:

4. Re: active page vs selected page
Laubender Jan 13, 2017 11:53 AM (in response to Laubender)
https://forums.adobe.com/message/9259728#9259728


als Antwort auf: [#568300]

Auf welche Seite wurde zuletzt geklickt?

Martin Fischer
  
Beiträge gesamt: 12779

4. Jan 2019, 16:34
Beitrag # 5 von 26
Beitrag ID: #568303
Bewertung:
(5101 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Allerdings gibt es auch den Befehl "app.activeDocument.placeGuns.loadPlaceGun(FILE)".

Warum nicht gleich auf diese Weise laden, sondern über den IDMS-Umweg?


als Antwort auf: [#568301]
(Dieser Beitrag wurde von Martin Fischer am 4. Jan 2019, 16:37 geändert)

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

4. Jan 2019, 16:36
Beitrag # 6 von 26
Beitrag ID: #568304
Bewertung:
(5099 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und noch eine Frage:

Wie halte ich mein Script an, bis die PlaceGun positioniert wurde?

Bei Dateipositionierungen kann ich über true/false abfragen. Derzeit wird zwar meine PlaceGun geladen, aber im Hintergund arbeitet mein Script weiter und will auf das rectangle zugreifen, das sich aber noch in der PlaceGun befindet.


als Antwort auf: [#568303]

Auf welche Seite wurde zuletzt geklickt?

Martin Fischer
  
Beiträge gesamt: 12779

4. Jan 2019, 16:47
Beitrag # 7 von 26
Beitrag ID: #568305
Bewertung:
(5089 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Wie halte ich mein Script an, bis die PlaceGun positioniert wurde?


Theoretisch kannst Du den Status "placeGuns.loaded" abfragen.

Praktisch kannst Du das Skript aber nach dem Laden der PlaceGun nicht unterbrechen, um zwischenrein 'was abzulegen und dann mit dem Skript fortzufahren - oder doch?


als Antwort auf: [#568304]

Auf welche Seite wurde zuletzt geklickt?

Uwe Laubender
Beiträge gesamt: 5316

4. Jan 2019, 16:47
Beitrag # 8 von 26
Beitrag ID: #568306
Bewertung:
(5086 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Und noch eine Frage:
Wie halte ich mein Script an, bis die PlaceGun positioniert wurde?…


Gute Frage. Wie wär's mit einem eventlistening-Mechanismus, der nach afterPlace schaut? Das Objekt in der placegun könnte einen speziellen Namen enthalten, falls sich der Anwender entscheidet nach dem Skriptstart noch mehr Objekte zu laden.


als Antwort auf: [#568304]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

4. Jan 2019, 17:14
Beitrag # 9 von 26
Beitrag ID: #568307
Bewertung:
(5076 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf:
Antwort auf: Wie halte ich mein Script an, bis die PlaceGun positioniert wurde?


Theoretisch kannst Du den Status "placeGuns.loaded" abfragen.

Praktisch kannst Du das Skript aber nach dem Laden der PlaceGun nicht unterbrechen, um zwischenrein 'was abzulegen und dann mit dem Skript fortzufahren - oder doch?


Das wäre unschön, da diese Word-Positioniererei halt x-mal am Tag durchgeführt wird. Hatte es gerade mal so probiert:

Code
	app.activeDocument.placeGuns.loadPlaceGun(snippetFile); 
while(app.activeDocument.placeGuns.loaded) {
var i = 1; //mach irgendwas
}


Das funktioniert aber nicht, da der Zustand trotz Klicks in ID sich nicht ändert. ESTK bleibt dann in der while-Schleife hängen.

Werde mich wohl, wie von Uwe vorgeschlagen, mit Event-Listener beschäftigen müssen ... hrmpf!


als Antwort auf: [#568305]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

5. Jan 2019, 15:33
Beitrag # 10 von 26
Beitrag ID: #568312
Bewertung:
(4965 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habe mich jetzt mal mit den EventListenern beschäftigt und es so gelöst:

Code
#target indesign-10 
#targetengine "mySession"

var gO = {};

main();

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

function listenerTest () {
$.writeln("Aufruf des weiteren Teils nach der Platzierung");
if(app.activeDocument.eventListeners.itemByID(gO.placeGunListenerID).isValid) {
app.activeDocument.eventListeners.itemByID(gO.placeGunListenerID).remove();
}
}


Hierzu gleich wieder zwei Fragen:
1) Wie kann ich das ohne diese globale Variable lösen? Würde eigentlich gerne die Listener-ID in die aufgerufene Funktion übergeben.
2) Kann man eine targetEngine zurücksetzen?


als Antwort auf: [#568307]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

5. Jan 2019, 17:12
Beitrag # 11 von 26
Beitrag ID: #568315
Bewertung:
(4951 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Peter,

so ganz habe ich die Funktion Deined Skriptes nicht verstanden, und Dein Listener wird am Ende nicht gelöscht.

Ich habe Deinen Code etwas umgeschrieben:

Code
  
#target indesign-13
#targetengine "mySession"

placeGunTest = new PlaceGunTest();
alert(placeGunTest);
placeGunTest.removeListener();
placeGunTest = undefined;
PlaceGunTest = undefined;
alert(PlaceGunTest==undefined);
alert(placeGunTest==undefined);
/*Object*/function PlaceGunTest()
{
var /*Rectangle*/newRect = app.activeWindow.activePage.rectangles.add(),
/*File*/rectFile = File("~/Desktop/rec.idms"),
/*Int*/placeGunListener;
newRect = app.activeWindow.activePage.rectangles.add();
newRect.exportFile(ExportFormat.INDESIGN_SNIPPET, rectFile);
newRect.remove();
/*EventListener*/placeGunListener = app.activeDocument.eventListeners.add("afterPlace", listenerTest);
app.activeDocument.placeGuns.loadPlaceGun(rectFile);
$.writeln("Constructor executed");
function listenerTest () {
$.writeln("Aufruf des weiteren Teils nach der Platzierung");
}
this.removeListener = function(){
if(placeGunListener != null)
placeGunListener.remove();
}
}


Ich erzeuge in der Funktion PlaceGunTest ein Object mit Constructor, der Deinen Code ausführt und die Methode removeListener zum Löschen des Listeners zur Verfogung stellt.
Damit ereiche ich, dass alle Variablen innerhalb des Objektes sichtbar sind und Methode removeListener von außen aufzurufen ist.
Code
placeGunTest = new PlaceGunTest(); 


erzeugt ein neues Objekt in placeGunText und führt den Constructorbereich aus.
Code
placeGunTest.removeListener(); 


entfernt den eventListener,
Code
placeGunTest = undefined; 
PlaceGunTest = undefined;


sollte den Speicher bei der nächsten Ausführung des Garbage Collectors wieder freigeben.
Antwort auf: Kann man eine targetEngine zurücksetzen?


Meines Wissens nach nur durch Neustart von InDesign.
HTH


als Antwort auf: [#568312]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

5. Jan 2019, 17:20
Beitrag # 12 von 26
Beitrag ID: #568316
Bewertung:
(4948 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,
Danke erstmal und ich habe das mal ausprobiert. Bei Deinem Vorschlag wird in der ESTK-Konsole zwar "Constructor executed" ausgegeben, nicht aber "Aufruf des weiteren Teils nach der Platzierung". Deutet für mich darauf hin, dass die Funktion listenerTest nicht ausgeführt wird. In dieser will ich aber den ganzen anderen Kram nach der Positionierung ausführen.

Viele Grüße

Peter


als Antwort auf: [#568315]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

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

dann lass mal die Zeile
Code
placeGunTest.removeListener 


weg! ;-)
Und wenn Du wirklich nur die Seite brauchst, kann man da natürlich noch einiges verbessern.
Der Listener darf erst entfernt werden, wenn die Platzierung erfolgt ist.
Ich würde ihn also nur einmal laden und erst entfernen, wenn die komplette Arbeit abgeschlossen ist.


als Antwort auf: [#568316]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 139

5. Jan 2019, 17:46
Beitrag # 14 von 26
Beitrag ID: #568318
Bewertung:
(4934 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf:
Antwort auf: Und noch eine Frage:
Wie halte ich mein Script an, bis die PlaceGun positioniert wurde?…


Gute Frage. Wie wär's mit einem eventlistening-Mechanismus, der nach afterPlace schaut? Das Objekt in der placegun könnte einen speziellen Namen enthalten, falls sich der Anwender entscheidet nach dem Skriptstart noch mehr Objekte zu laden.


Hallo Uwe,

wie weise ich denn dem platzierten Objekt einen Namen zu oder kann es identifizieren?

Das Resultat aus loadPlaceGun ist undefined und ich kann der Funktion nur die Datei und true/false für das Zeigen des Öffnen-Dialogs übergeben.

Viele Grüße

Peter


als Antwort auf: [#568306]

Auf welche Seite wurde zuletzt geklickt?

WernerPerplies
Beiträge gesamt: 2760

5. Jan 2019, 18:05
Beitrag # 15 von 26
Beitrag ID: #568319
Bewertung:
(4923 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Peter,

das platzierte Objekt ist bei mir selectiert, Du kannst also app.selection[0] einen Namen, oder besser ein Label zuweisen.
Mit dem hinzufügen eines Labels kannst Du auch mehrere Informationen hinterlassen.


als Antwort auf: [#568318]
X