[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Farben der Ebenen ändern - tomaxxiLAYERS

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

Farben der Ebenen ändern - tomaxxiLAYERS

MSB-Pixel
Beiträge gesamt: 57

5. Aug 2014, 17:05
Beitrag # 1 von 25
Bewertung:
(10091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

habe gerade bei Adobe Exchange folgendes Skript gefunden: tomaxxiLAYERS
Ich finde dieses echt super, da ich bisher meine Ebenen in einem Snippet gespeichert habe und dieses immer auf das Dokument gezogen habe. Mit diesem Skript funktioniert das ganze natürlich viel komfortabler.

Jetzt zu meiner Frage:
Kennt jemand dieses Skript, und kann mir vielleicht sagen, ob man auch die Farben der Ebenen ändern kann?

Da man auch als Standard z.B. die Ebene sperren kann habe ich mir gedacht, dass man auch die Farben als Standard ändern kann.
X

Farben der Ebenen ändern - tomaxxiLAYERS

Kai Rübsamen
Beiträge gesamt: 4684

5. Aug 2014, 19:36
Beitrag # 2 von 25
Beitrag ID: #530722
Bewertung:
(10015 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

theoretisch und praktisch ja, siehe Code.
Code
// Ebenen erstellen 
main ();

function main() {
// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.");
exit();
}

// die Namen für die Ebenen und Farben festlegen
var layerStuff = [
[ "Hintergrund" , UIColors.LIGHT_GRAY ] ,
[ "Bilder" , UIColors.RED ] ,
[ "Texte" , UIColors.LIGHT_BLUE ]
];

var curDoc = app.documents[0];
var allLayers = curDoc.layers.length;
if ( curDoc.layers.length != 1 ) {
alert ("Achtung\rDas Skript funktioniert momentan nur, wenn außer der Standardebene keine weiteren Ebenen im Dokument sind!");
exit();
}

// benennt die Ebene 1 um
var basicLayer = curDoc.layers[0];
basicLayer.name = layerStuff[0][0];
basicLayer.layerColor = layerStuff[0][1];

for ( var i = 1; i < layerStuff.length; i ++ ) {
curDoc.layers.add({ name: layerStuff[i][0], layerColor: layerStuff[i][1] });
}
}


Praktisch in deinem Fall leider nein, da das im Skript nicht vorgesehen ist und tomaxxi den Code geschützt hat (also nicht verändert werden kann). Schreib ihn doch einfach an, ob er die Funktion ergänzt.


als Antwort auf: [#530711]
(Dieser Beitrag wurde von Kai Rübsamen am 5. Aug 2014, 19:37 geändert)

Farben der Ebenen ändern - tomaxxiLAYERS

MSB-Pixel
Beiträge gesamt: 57

6. Aug 2014, 09:22
Beitrag # 3 von 25
Beitrag ID: #530739
Bewertung:
(9950 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

genau das wurde bereits 2x auf der Webseite von tomaxxi gefragt, leider unbeantwortet.

Aber Dein Skript funktioniert auch super.
Gibt es denn eine Möglichkeit, dass das Skript bei jedem neuen Dokument automatisch startet, so das die Ebenen gleich beim anlegen eines neuen Dokuments drin sind?

Ansonsten muss ich mich mit einem Tastaturkürzel behelfen, aber automatisch wäre natürlich bequemer ;-)


als Antwort auf: [#530722]

Farben der Ebenen ändern - tomaxxiLAYERS

Kai Rübsamen
Beiträge gesamt: 4684

6. Aug 2014, 10:32
Beitrag # 4 von 25
Beitrag ID: #530741
Bewertung:
(9918 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Theoretisch ja, praktisch wahrscheinlich auch. Ich kriegs nur noch nicht hin …

An die anderen Skripter: Das wäre mein erstes Event-Skript. Also helft mir bitte mal ein bisschen. :)

Code
#targetengine "session" 
var myEventListener = app.addEventListener("afterNew", makeLayers);
function makeLayers() {
// some stuff
var curDoc = app.documents[0];
// some stuff


1. Woher weis "afterNew" das es sich um ein Dokument handelt und nicht um ein gerade erstelltes Rechteck? > Gilt das generell nur für Dokumente?

2. Wenn ich meinen oben geposteten Schnipsel um die paar Zeilen hier ergänze, funktioniert das schon beim ersten Mal. Erstelle ich jedoch mit Apfel+N ein zweites Dokument, erhalte ich nach Bestätigen von 'OK' die Meldung, dass es mehr wie eine Ebene gibt (also meinen oben eingefügten alert).

Das zeigt mir, dass das Skript versucht im gerade sichtbaren Dokument und nicht in dem Dokument das neu erstellt werden soll läuft. Wenn dann das neue Dokument wieder mit einer Ebene angelegt wurde und ich das Skript erneut starte, wird mir erneut der alert gezeigt, es werden mir aber im geraden sichtbaren Dokument Ebenen angelegt.

Ich würde vermuten, dass ich das Dokument nicht mit var curDoc = app.documents[0] ansprechen darf? Wenn ich aber activeDocument wähle, erhalte ich gleich zu Beginn einen Fehlermeldung.

Wo liegt mein Fehler?
Danke.


als Antwort auf: [#530739]

Farben der Ebenen ändern - tomaxxiLAYERS

Quarz
Beiträge gesamt: 3555

6. Aug 2014, 11:40
Beitrag # 5 von 25
Beitrag ID: #530744
Bewertung:
(9887 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo MSB-Pixel

Antwort auf: Gibt es denn eine Möglichkeit, dass das Skript bei jedem neuen Dokument
automatisch startet, so das die Ebenen gleich beim anlegen eines neuen
Dokuments drin sind?


Schau mal hier das Script vom Martin.
Ich benutze es schon lange :-)
http://www.hilfdirselbst.ch/...i?post=321842#321842


Gruß
Quarz

-------------------------------------
Win7 | InDesign CS6 ver 8.02



als Antwort auf: [#530739]

Farben der Ebenen ändern - tomaxxiLAYERS

Uwe Laubender
Beiträge gesamt: 5318

6. Aug 2014, 12:15
Beitrag # 6 von 25
Beitrag ID: #530747
Bewertung:
(9870 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Kai!
Beim event-Scripting ist es manchmal wie mit "Pudding an die Wand nageln" ;-)

zu Frage 1:
Weil diese event unter die Klasse der document events fällt.
Durchsuch mal die DOM-Dokumentation von Jongware nach "afterNew" (CHM-Dateien).

zu Frage 2 kann ich (noch) nichts sagen.


als Antwort auf: [#530741]

Farben der Ebenen ändern - tomaxxiLAYERS

Uwe Laubender
Beiträge gesamt: 5318

6. Aug 2014, 12:17
Beitrag # 7 von 25
Beitrag ID: #530748
Bewertung:
(9868 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ah. Quarz hat Dir bereits die korrekte Antwort serviert…
Danke!!


als Antwort auf: [#530747]

Farben der Ebenen ändern - tomaxxiLAYERS

MSB-Pixel
Beiträge gesamt: 57

6. Aug 2014, 12:40
Beitrag # 8 von 25
Beitrag ID: #530751
Bewertung:
(9849 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Quarz,

danke für den Link, funktioniert soweit auch.
Allerdings immer beim Neustart von InDesign kommt beim ERSTEN neuen Dokument folgende Fehlermeldung:
Zitat Ein angehängtes Skript hat den folgenden Fehler verursacht:
Die Anforderung kann nicht bearbeitet werden, da ein modales Dialogfeld oder eine modale Warnmeldung aktiv ist.
Möchten Sie diesen Ereignis-Handler deaktivieren


Danach funktioniert es einwandfrei, bis zum nächsten Neustart von InDesign...

Kann mir als Skriptlaie jemand sagen, was ich anders machen muss, damit es IMMER funktioniert, also auch nach dem Neustart?


als Antwort auf: [#530748]

Farben der Ebenen ändern - tomaxxiLAYERS

Uwe Laubender
Beiträge gesamt: 5318

6. Aug 2014, 12:59
Beitrag # 9 von 25
Beitrag ID: #530753
Bewertung:
(9826 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja.
Den userInteractionLevel der ScriptPreferences auf UserInteractionLevels.NEVER_INTERACT stellen. Ob das allerdings angeraten ist, ist eine ganz andere Frage…

Für ein Script, das eine begrenze zeitlang läuft: sicherlich.
Für ein eventScript, das die ganze Zeit aktiv sein muss: eher zweifelhaft.

Code
//AUSSCHALTEN: 
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;

Code
//EINSCHALTEN (alles): 
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;

Code
//EINSCHALTEN (nur die alerts) 
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALERTS;



als Antwort auf: [#530751]

Farben der Ebenen ändern - tomaxxiLAYERS

Kai Rübsamen
Beiträge gesamt: 4684

6. Aug 2014, 13:18
Beitrag # 10 von 25
Beitrag ID: #530754
Bewertung:
(9800 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe und Quarz, danke für eure Beiträge.

In Martins Beitrag steckt in der Tat die Lösung bzw. die teilweise Antwort auf meine Frage.

Was ich nicht verstanden habe:
In der Funktion von Martin wird eine Variable 'myEvent' deklariert. Wo wird denn da ein Parameter übergeben oder anders gefragt: Warum steckt dann da automatisch ein event drin und ich komme dann mit 'myEvent.parent' auf das Dokument??


als Antwort auf: [#530753]

Farben der Ebenen ändern - tomaxxiLAYERS

Kai Rübsamen
Beiträge gesamt: 4684

7. Aug 2014, 11:20
Beitrag # 11 von 25
Beitrag ID: #530783
Bewertung:
(9614 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, 184 Leute lesen das und keiner hat eine Antwort auf meine Frage, hm!

Hans war so freundlich und hat es mir erklärt. :)

Bei mir funkt am Anfang kein Dialog dazwischen und zuverlässig funktioniert jetzt bei mir das

Code
#targetengine "session"  
app.addEventListener( "afterNew", addLayer );

function addLayer( myEvent ) {
//~ alert (myEvent);
//~ alert (myEvent.eventType);
//~ alert (myEvent.parent);

// die Namen für die Ebenen und Farben festlegen
var layerStuff = [
[ "Hintergrund" , UIColors.LIGHT_GRAY ] ,
[ "Bilder" , UIColors.RED ] ,
[ "Texte" , UIColors.LIGHT_BLUE ]
];

var curDoc = myEvent.parent;

// benennt die Ebene 1 um
var basicLayer = curDoc.layers[0];
basicLayer.properties = { name: layerStuff[0][0], layerColor: layerStuff[0][1] };

for ( var i = 1; i < layerStuff.length; i ++ ) {
curDoc.layers.add({ name: layerStuff[i][0], layerColor: layerStuff[i][1] });
}
}



als Antwort auf: [#530754]

Farben der Ebenen ändern - tomaxxiLAYERS

Hans Haesler
  
Beiträge gesamt: 5826

7. Aug 2014, 13:28
Beitrag # 12 von 25
Beitrag ID: #530798
Bewertung:
(9584 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo Kai,

ich hatte meine "Ahnung" nicht vorher im Forum gepostet, weil ich unterwegs war. Und die anderen 183 (mittlerweile über 200) hielten sich zurück, weil: Wie willst Du einen Pudding erklären, dessen Form so eigenartig definiert ist?

Zuerst zu einer früheren Frage: "afterNew" nur dem Dokument zugeordnet (im OMV nachzuprüfen). Auf die Erzeugung eines Bildrahmens wird also nicht reagiert.

Und ja, es ist in der Tat nur schwer zu begreifen, warum "das" funktionieren kann:
In den Klammern nach 'addEventListener' steht ...
1. der Event-Typ in Anführungszeichen;
2. der Name der Funktion ohne irgendetwas.

Nicht genug: Das Attribut 'myEvent' in der Funktion bekommt offensichtlich einen Wert zugewiesen. Einfach so.
Übrigens: Anstelle von 'myEvent' kann auch 'aEvent' oder 'evt' oder 'kai' eingesetzt werden.

Die Entwickler haben das bestimmt aus gewissen Gründen so eingerichtet. Und man muss es akzeptieren: "Don't think too much."

Gruss, Hans


als Antwort auf: [#530783]

Farben der Ebenen ändern - tomaxxiLAYERS

WernerPerplies
Beiträge gesamt: 2762

7. Aug 2014, 14:28
Beitrag # 13 von 25
Beitrag ID: #530806
Bewertung:
(9565 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat der Event-Typ in Anführungszeichen

Weil der Typ als normaler String behandelt und in einer Liste über Stringvergleich gefunden wird.
Alternativ hätte man auch einen Enumerator-Typ verwenden können, hat man aber nicht.
Zitat der Name der Funktion ohne irgendetwas

Einer Funktion ist halt ein ganz normaler Speicherplatz zugeordnet. Hinter dem Namen verbirgt sich intern eine Speicheradresse. Wenn du in Deinem Skript Funktionen aufrufst verwendest Du doch auch Namen und keine Stringkonstanten.
Der Zugriff auf Variable, Objekte und Funktionen erfolgt immer ohne Anführungszeichen.
Zitat Anstelle von 'myEvent' kann auch 'aEvent' oder 'evt' oder 'kai' eingesetzt werden.


Das liegt daran, das der Funktion keine einzelnen Variablen übergeben werden, sondern ein Array. Der Zugriff erfolgt dann in der Reihenfolge der in der Funktionsdeklaration verwendeten Namen.
Wenn Du z. B. einen Namen weglässt, sind die folgenden Parameter falsch zugeordnet.
siehe z. B. auch:
Function arguments


als Antwort auf: [#530798]

Farben der Ebenen ändern - tomaxxiLAYERS

Hans Haesler
  
Beiträge gesamt: 5826

7. Aug 2014, 17:54
Beitrag # 14 von 25
Beitrag ID: #530814
Bewertung:
(9513 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

danke für die Ausführungen.

@ Kai: Meine Aussage ("afterNew" nur dem Dokument zugeordnet), ist falsch. Es gibt mindestens ein anderes Objekt: "[object Link]".

Deshalb kommt beim Laden von Bildern eine Fehlermeldung, wenn das aktuelle addLayers-Script geladen wurde. Es muss mit folgendem Test ergänzt werden:

Code
function addLayer(myEvent) { 
if (myEvent.parent == "[object Document]") {
// hier der Layer-Stuff usw.
}
}

Gruss, Hans


als Antwort auf: [#530806]

Farben der Ebenen ändern - tomaxxiLAYERS

Kai Rübsamen
Beiträge gesamt: 4684

7. Aug 2014, 18:10
Beitrag # 15 von 25
Beitrag ID: #530815
Bewertung:
(9507 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@ Werner: Mich hat eher verwirrt, dass bei der Funktion keine runden Klammern mitangegeben werden. Ich hab das auch schon bei der Schreibweise innerhalb von 'doScript' gesehen.

@ Hans: Super und vielen Dank. Mich wundert, dass bei Quarz das Script von Martin seit Jahren seinen Dienst tut. Hier hätte ja der Fehler auch mal kommen müssen; es sei denn, dort gibt es keine oder nur ordentlich verknüpfte Bilder ;-)

@ MSB-Pixel: Welcher Dialog ist bei dir offen? Mach bitte mal einen Screenshot. Ich habe die Hoffnung, das wir das auch noch wegbekommen. Der Anlass von Hans letztem Post war übrigens der beigefügte Screen.


als Antwort auf: [#530814]
Anhang:
Bildschirmfoto 2014-08-07 um 12.18.44.png (99.0 KB)
X