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

4. Jan 2019, 15:12
Beitrag # 1 von 26
Bewertung:
(3035 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: 4502

4. Jan 2019, 15:37
Beitrag # 2 von 26
Beitrag ID: #568300
Bewertung:
(3019 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.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#568297]

Auf welche Seite wurde zuletzt geklickt?

Martin Fischer
  
Beiträge gesamt: 12133

4. Jan 2019, 16:22
Beitrag # 3 von 26
Beitrag ID: #568301
Bewertung:
(3003 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

Viele Grüße
Martin




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: 4502

4. Jan 2019, 16:29
Beitrag # 4 von 26
Beitrag ID: #568302
Bewertung:
(2996 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
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#568300]

Auf welche Seite wurde zuletzt geklickt?

Martin Fischer
  
Beiträge gesamt: 12133

4. Jan 2019, 16:34
Beitrag # 5 von 26
Beitrag ID: #568303
Bewertung:
(2995 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?

Viele Grüße
Martin




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: 133

4. Jan 2019, 16:36
Beitrag # 6 von 26
Beitrag ID: #568304
Bewertung:
(2993 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: 12133

4. Jan 2019, 16:47
Beitrag # 7 von 26
Beitrag ID: #568305
Bewertung:
(2983 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?

Viele Grüße
Martin




als Antwort auf: [#568304]

Auf welche Seite wurde zuletzt geklickt?

Uwe Laubender
Beiträge gesamt: 4502

4. Jan 2019, 16:47
Beitrag # 8 von 26
Beitrag ID: #568306
Bewertung:
(2980 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.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#568304]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 133

4. Jan 2019, 17:14
Beitrag # 9 von 26
Beitrag ID: #568307
Bewertung:
(2970 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: 133

5. Jan 2019, 15:33
Beitrag # 10 von 26
Beitrag ID: #568312
Bewertung:
(2859 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: 2384

5. Jan 2019, 17:12
Beitrag # 11 von 26
Beitrag ID: #568315
Bewertung:
(2845 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

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#568312]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 133

5. Jan 2019, 17:20
Beitrag # 12 von 26
Beitrag ID: #568316
Bewertung:
(2842 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: 2384

5. Jan 2019, 17:31
Beitrag # 13 von 26
Beitrag ID: #568317
Bewertung:
(2838 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.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#568316]

Auf welche Seite wurde zuletzt geklickt?

peterhenrich
Beiträge gesamt: 133

5. Jan 2019, 17:46
Beitrag # 14 von 26
Beitrag ID: #568318
Bewertung:
(2828 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: 2384

5. Jan 2019, 18:05
Beitrag # 15 von 26
Beitrag ID: #568319
Bewertung:
(2817 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.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#568318]
X
Hier Klicken

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
21.10.2019 - 22.10.2019

München
Montag, 21. Okt. 2019, 09.30 Uhr - Dienstag, 22. Okt. 2019, 17.30 Uhr

Schulung, Seminar

Wer hochwertige und farbechte Ergebnisse im Digitaldruck erzielen will, der braucht umfassende Colormanagemement- und PDF-Kenntnisse. Selbst wenn die Maschine kalibriert und das Rip richtig konfiguriert ist, lassen die Ergebnisse oft zu wünschen übrig. Der Grund hierfür liegt zu 90 % in den Daten und in falsch eingestellten Anwendungsprogrammen, auch in falschen Einstellungen im Druckmenü.

Nein

Organisator: Cleverprinting.de

https://www.cleverprinting.de/zweitaegige-weiterbildung-zum-digitaldruck-operator/

Zweitägige Weiterbildung zum Digitaldruck-Operator
Veranstaltungen
21.10.2019 - 23.10.2019

Riga, die Hauptstadt Lettlands
Montag, 21. Okt. 2019, 09.32 Uhr - Mittwoch, 23. Okt. 2019, 09.33 Uhr

VIP-Event

Jedes Jahr haben Sie die Möglichkeit, beim VIP-Event mehr über die Produkte von axaio software, callas software und andere Lösungen zu erfahren, die Four Pees anbietet.

Diejenigen, die uns bereits kennen, wissen, dass wir gerne Business mit Genuss kombinieren. Wir sind schon sehr gespannt und wollen Ihnen deshalb gern einen Blick hinter die Kulissen gewähren ...

Die Stadt der gotischen Türme
Das diesjährige Ziel ist Riga, die Hauptstadt Lettlands. Die gotischen Türme, die das Stadtbild Rigas dominieren, haben den Anschein von Strenge, aber das trifft nicht zu. Diese pulsierende, kosmopolitische Stadt ist die größte der drei baltischen Hauptstädte und beherbergt einige Szenebars und experimentelle Restaurants. Das klingt doch nach einem perfekten Rahmen für unser nächstes VIP-Event, oder?

Nein

Organisator: callas

https://www.callassoftware.com/de/events/2019/10/vip-event-riga

Sind Sie für das nächste VIP-Event bereit?