[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Wie spricht man ein platziertes Snippet an?

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

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

31. Mär 2012, 12:37
Beitrag # 1 von 14
Bewertung:
(5050 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo miteinander,

ich habe folgendermaßen einen als Snippet vorhandenen TextFrame platziert:

Set SnippetFrame = INDD.ActiveDocument.Pages.Item(1).Place("C:\test.idms", Array(PositionRight, PositionTop), , False, True)

Es gelingt es mir nicht, anschließend den SnippetFrame anzusprechen. Die folgenden Befehle liefern die Fehlermeldung "Objekt unterstützt diese Methode oder Eigenschaft nicht":

Test1 = SnippetFrame.Label

SnippetFrame.FillColor = INDD.ActiveDocument.Colors.Item("Knallgelb")

Was mache ich falsch?

Vielen Dank für eure Hilfe.

Gruß
wopii
X

Wie spricht man ein platziertes Snippet an?

Hans Haesler
  
Beiträge gesamt: 5826

1. Apr 2012, 11:36
Beitrag # 2 von 14
Beitrag ID: #492826
Bewertung:
(5000 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo wopii,

herzlich willkommen in der Skriptwerkstatt auf HilfDirSelbst! :-)

Dein Beitrag wurde bisher fast 50 Mal gelesen. Aber keine Antwort auf die eigentlich einfache Frage.
Würdest Du JavaScript verwenden, dann wäre der Erfolg bestimmt grösser ...

Zu Deiner Frage: SnippetFrame ist nicht ein Objekt, sondern ein Array.
Um das Snippet anzusprechen, musst Du das erste Element des Arrays adressieren. Vielleicht so(?):

Code
SnippetFrame.Item(1).FillColor = INDD.ActiveDocument.Colors.Item("Knallgelb") 

Nicht getestet, weil Mac OS X.

Gruss, Hans


als Antwort auf: [#492801]

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

1. Apr 2012, 11:54
Beitrag # 3 von 14
Beitrag ID: #492827
Bewertung:
(4990 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

besten Dank für Deine hilfreiche Antwort. Ja, so funktioniert es!

Dass ein Snippet, das sich auf dem Bildschirm genauso "anfühlt" wie ein TextFrame, kein solcher ist, sondern ein Array... darauf muss man erst einmal kommen. Aber ich werde hier jetzt nicht über die InDesign-API-Dokumentation jammern;-)

Ja, JavaScript ist in InDesign-Kreisen weiter verbreitet als VB6, aber mit VB6 kenne ich mich aus, mit JavaScript nicht.

Nochmals besten Dank und viele Grüße
Wolfgang


als Antwort auf: [#492826]

Wie spricht man ein platziertes Snippet an?

Hans Haesler
  
Beiträge gesamt: 5826

1. Apr 2012, 12:00
Beitrag # 4 von 14
Beitrag ID: #492828
Bewertung:
(4983 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Wolfgang,

bitteschön.

Sicher, das plazierte Snippet fühlt sich im Dokument wie ein Text-(oder Bild-)rahmen an.

Aber hier geht es um das Ergebnis des Plazierungs-Befehls. Und dieses Ergebnis ist nun mal als Array definiert. Und darauf kommt man, indem man sich im Object-Model-Verzeichnis umschaut ...

Gruss, Hans


als Antwort auf: [#492827]

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

1. Apr 2012, 12:56
Beitrag # 5 von 14
Beitrag ID: #492832
Bewertung:
(4947 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Code
SnippetFrame.Item(1).FillColor = INDD.ActiveDocument.Colors.Item("Knallgelb") 


ist zwar syntaxfehlerfrei, liefert aber leider nicht so ganz das Ergebnis, das ich haben möchte: Der Befehl bewirkt, dass der Text in Knallgelb erscheint. Was ich möchte, ist ein knallgelber Frame-Hintergrund (so wie es der Fall ist, wenn ich FillColor auf einen TextFrame anwende).

Mit Item(2) und anderen Indizes habe ich schon herumgespielt, auch mit Parent. Nichts funktioniert.

Weißt Du Rat?

Viele Grüße
Wolfgang, der gerade dabei ist, weitere 250 MB Dokumentation von der Adobe-Website herunterzuladen, aber nicht die Hoffnung hat, darin Antwort auf Fragen zu finden...


als Antwort auf: [#492826]

Wie spricht man ein platziertes Snippet an?

Gerald Singelmann
  
Beiträge gesamt: 6269

1. Apr 2012, 13:31
Beitrag # 6 von 14
Beitrag ID: #492833
Bewertung:
(4929 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Dass ein Snippet, das sich auf dem Bildschirm genauso "anfühlt" wie ein TextFrame,


Erstellen Sie mal ein Snippet, das aus 5 Textrahmen besteht und platzieren das. Fühlt sich das immer noch an wie ein Textrahmen?


als Antwort auf: [#492827]

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

1. Apr 2012, 13:50
Beitrag # 7 von 14
Beitrag ID: #492834
Bewertung:
(4924 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Gerald Singelmann ]
Zitat Dass ein Snippet, das sich auf dem Bildschirm genauso "anfühlt" wie ein TextFrame,


Erstellen Sie mal ein Snippet, das aus 5 Textrahmen besteht und platzieren das. Fühlt sich das immer noch an wie ein Textrahmen?


Nein, in der Tat. Ist irgendwie logisch:-)

Viele Grüße
Wolfgang


als Antwort auf: [#492833]

Wie spricht man ein platziertes Snippet an?

Hans Haesler
  
Beiträge gesamt: 5826

1. Apr 2012, 14:05
Beitrag # 8 von 14
Beitrag ID: #492836
Bewertung:
(4911 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Wolfgang,

Antwort auf: Weißt Du Rat?

Würdest Du mir bitte das besagte Snippet zustellen?
Die Adresse findest Du in meinem Profil.

Gruss, Hans


als Antwort auf: [#492832]

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

1. Apr 2012, 14:20
Beitrag # 9 von 14
Beitrag ID: #492837
Bewertung:
(4900 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das Snippet ist unterwegs.

Gruß
Wolfgang


als Antwort auf: [#492836]

Wie spricht man ein platziertes Snippet an?

Hans Haesler
  
Beiträge gesamt: 5826

1. Apr 2012, 15:34
Beitrag # 10 von 14
Beitrag ID: #492842
Bewertung:
(4851 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Wolfgang,

danke für das Snippet.

Also ... SnippetFrame.Item(1) ist der Textrahmen. Wenn der Text, der sich darin befindet, eingefärbt werden soll, dann muss ParentStory eingefügt werden.

Diese JavaScript-Zeile funktioniert wie erwartet:

Code
SnippetFrame[0].parentStory.fillColor = app.activeDocument.colors.itemByName("Knallgelb"); 

Mit VB wird es vermutlich so klappen:

Code
SnippetFrame.Item(1).ParentStory.FillColor = INDD.ActiveDocument.Colors.Item("Knallgelb") 

Gruss, Hans


als Antwort auf: [#492837]

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

1. Apr 2012, 16:24
Beitrag # 11 von 14
Beitrag ID: #492844
Bewertung:
(4826 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Hans Haesler ]
Zitat Mit VB wird es vermutlich so klappen:

Code
SnippetFrame.Item(1).ParentStory.FillColor = INDD.ActiveDocument.Colors.Item("Knallgelb") 


Leider nein:-( Sattsam bekannte Fehlermeldung: "Dieses Objekt unterstützt diese Methode oder Eigenschaft nicht". Offenbar haben TextFrames, die via Snippet platziert wurden, keine Eltern. Ich hab's auch mit einem Snippet versucht, das zwei verkettete Textrahmen enthält -- gleiches Ergebnis.

Aus Verzweiflung habe ich noch folgendes versucht:

Code
SnippetFrame.Item(1).Texts.Item(1).ParentStory.FillColor = INDD.ActiveDocument.Colors.Item("Knallgelb") 


Das ist offenbar syntaktisch korrekt (keine Fehlermeldung), färbt aber ebenfalls die Zeichen und nicht den Hintergrund.

Auch folgendes funktioniert nicht:

Code
Dim Duplikat as InDesign.TextFrame 
Set Duplikat = SnippetFrame.Item(1)

Ich geb's jetzt auf. Die Sache ist glücklicherweise nicht lebenswichtig.

Herzlichen Dank für die Zeit, die Du Dir genommen hast!

Wolfgang



als Antwort auf: [#492842]

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

1. Apr 2012, 17:39
Beitrag # 12 von 14
Beitrag ID: #492845
Bewertung:
(4807 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das Problem ist gelöst. Ursache war, dass das Snippet im Rahmen einer Schleife

Code
For Each TextFrame in INDD.ActiveDocument.TextFrames 
If TextFrame.Label <> "" then
Set SnippetFrame = ....
End If
next

platziert wurde.

Während die Schleife durchlaufen wird, ist das Snippet nicht korrekt ansprechbar (was ja auch irgendwie verständlich ist). Danach kann es wie ein ganz normaler TextFrame angesprochen werden, und FillColor färbt den Frame und nicht die Zeichen.

Tja, immer wieder diese Schleifen...

Viele Grüsse
Wolfgang


als Antwort auf: [#492844]

Wie spricht man ein platziertes Snippet an?

Hans Haesler
  
Beiträge gesamt: 5826

1. Apr 2012, 21:49
Beitrag # 13 von 14
Beitrag ID: #492848
Bewertung:
(4757 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Wolfgang,

ich sehe erst jetzt, dass ich die Aufgabe nicht verstanden habe ...

Nicht der Text, sondern der Hintergrund des Textrahmens soll eingefärbt werden. Dazu braucht es natürlich das ParentStory nicht.

Aber bei Deiner Schleife blicke ich nicht ganz durch. Woher nimmst Du denn die Pfade der Snippets? Die Schleife läuft vorwärts: Da müssen sich doch die importierten, gelabelten Snippets störend auswirken.

Ich habe jetzt in einem Dokument das Farbfeld "Knallgelb" angelegt und fünf Textrahmen erzeugt. Zwei davon mit einem Label versehen.

Zu Beginn wird per Dialog das Snippet ausgewählt. Dann werden in der rückwärts laufenden Schleife die Textrahmen geprüft. Wenn bei einem Rahmen das Label nicht ein leerer String ist, dann wird das Snippet geladen und der Hintergrund des Snippet-Rahmens wird mit "Knallgelb" eingefärbt.

Code
var curDoc    = app.documents[0]; 
var snipFile = File.openDialog ();
var txtFrames = curDoc.textFrames;
var nFrames = txtFrames.length;
for (var i=nFrames-1; i>0; i--) {
if (txtFrames.item(i).label != "") {
var SnippetFrame = curDoc.pages.item(0).place(File(snipFile));
SnippetFrame[0].fillColor = curDoc.colors.itemByName("Knallgelb");
}
}

Ergebnis: Das Snippet ist in der Schleife sehr wohl ansprechbar. Bedingung ist, dass SnippetFrame.Item(1) benutzt wird.

Ach ja: Entschuldige bitte das JavaScript. Aber für VBA sind meine Kenntnisse nicht ausreichend.

Gruss, Hans


als Antwort auf: [#492845]

Wie spricht man ein platziertes Snippet an?

wopii
Beiträge gesamt: 8

2. Apr 2012, 10:05
Beitrag # 14 von 14
Beitrag ID: #492861
Bewertung:
(4691 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Hans Haesler ] Hallo Hans,

Zitat Aber bei Deiner Schleife blicke ich nicht ganz durch. Woher nimmst Du denn die Pfade der Snippets?

Die stammen aus einer Datenbank, die im Zuge von Vorgängerprojekten angelegt wurde.

Zitat Die Schleife läuft vorwärts: Da müssen sich doch die importierten, gelabelten Snippets störend auswirken.


Ja, da hast Du völlig recht. Eine solche Schleife vorwärts laufen zu lassen, ist sicher keine gute Idee:-(

Zitat Ich habe jetzt in einem Dokument das Farbfeld "Knallgelb" angelegt und fünf Textrahmen erzeugt. Zwei davon mit einem Label versehen.

Zu Beginn wird per Dialog das Snippet ausgewählt. Dann werden in der rückwärts laufenden Schleife die Textrahmen geprüft. Wenn bei einem Rahmen das Label nicht ein leerer String ist, dann wird das Snippet geladen und der Hintergrund des Snippet-Rahmens wird mit "Knallgelb" eingefärbt.


Ich habe die Schleife versuchshalber mal rückwärts laufen lassen. Das sieht dann in VB etwa so aus:

Code
Dim AnzahlFrames as Integer 
Dim Z as Integer
Dim Pfad as String

AnzahlFrames = INDD.ActiveDocument.TextFrames.Count

For Z = AnzahlFrames To 1 Step -1
Set myFrame = INDD.ActiveDocument.TextFrames.Item(Z)
If myFrame.Label <> "" then
Set SnippetFrame = INDD.ActiveDocument.Place(Pfad)
SnippetFrame.Item(1).FillColor = INDD.ActiveDocument.Colors.Item("Knallgelb")
End If
Next Z


Ergebnis: Es wird die Schrift eingefärbt und nicht der Rahmen. Ein versuchsweise eingefügtes "ParentStory" erzeugt eine Fehlermeldung.

Fazit: Innerhalb dieser Schleife, egal ob vorwärts oder rückwärts, färbt FillColor die Schrift und nicht den TextFrame. Weiß der Teufel, warum. Scheint eine Besonderheit der VB-Implementierung zu sein.

Wenn ich nach dem Platzieren eine separate Schleife speziell zum Färben der TextFrames ausführe, färbt FillColor, wie erwartet, die TextFrames.

Ich hab's aufgegeben, das verstehen zu wollen...

Viele Grüsse
Wolfgang



als Antwort auf: [#492848]
X