[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt In Absatzformatpalette ausgewählte Absatzformate ermitteln

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

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12778

13. Dez 2019, 07:55
Beitrag # 1 von 18
Bewertung:
(6545 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,

ist es möglich, per Skript eine Auswahl von Absatzformaten in der Absatzformatpalette zu ermitteln?

Zwar habe ich daran erhebliche Zweifel, aber möglicherweise übersehe ich etwas.
X

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2759

13. Dez 2019, 10:39
Beitrag # 2 von 18
Beitrag ID: #573267
Bewertung:
(6524 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Herr Fischer,
Zitat ist es möglich, per Skript eine Auswahl von Absatzformaten in der Absatzformatpalette zu ermitteln?

Meinen Sie ausgewählte Formate in der Palette finden?
oder
Formate mit bestimmten Eigenschaften ermitteln und ggf. gruppieren.

Ich vermute, eher Ersteres, oder?

Dann sind Ihre Zweifel wohl berechtigt.

Ein wenig von hinten durch den Kopf:
Vielleicht schaffen Sie es mit MenuAction.invoke()-> Neue Gruppe aus Formaten (temporär), danach diese Gruppe wieder löschen.


als Antwort auf: [#573264]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12778

13. Dez 2019, 11:13
Beitrag # 3 von 18
Beitrag ID: #573269
Bewertung:
(6505 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Perplies,

ja, ich meinte Ersteres.

Aber Ihr Vorschlag klingt interessant, so mutig das auch ist.

Man müsste noch ein paar Dinge abfangen (gleichnamige Absatzformate aus unterschiedlichen Gruppen temporär umbenennen und wieder einen Weg zurück bahnen).

Aber wenn es gar nicht anders geht, dann könnte dies tatsächlich eine Tür öffnen.

Vielen Dank für den Tipp.


als Antwort auf: [#573267]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2759

13. Dez 2019, 11:24
Beitrag # 4 von 18
Beitrag ID: #573270
Bewertung:
(6487 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,
Zitat Man müsste noch ein paar Dinge abfangen (gleichnamige Absatzformate aus unterschiedlichen Gruppen temporär umbenennen und wieder einen Weg zurück bahnen).

Da könnte Ihnen meine WpsStylesClass helfen.


als Antwort auf: [#573269]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12778

13. Dez 2019, 12:00
Beitrag # 5 von 18
Beitrag ID: #573275
Bewertung:
(6479 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mal seh’n.

Vielleicht etikettiere ich die Absatzformate auch einfach mit insertLabel() und Infos zur ursprünglichen Gruppe und Namen.


als Antwort auf: [#573270]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Uwe Laubender
Beiträge gesamt: 5314

13. Dez 2019, 14:17
Beitrag # 6 von 18
Beitrag ID: #573282
Bewertung:
(6459 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

Allgemein formuliert: Du brauchst im günstigsten Fall einen Menübefehl des Absatzformate-Bedienfeldes, der ohne Nachfragen an den Benutzer etwas macht.

"Neue Gruppe aus Formaten…" geht nicht.
Da kommt ein Dialog nach, der per Skript schwierig zu beantworten ist.

Bei einem ausgewählten Absatzformat:
Pech. "Format duplizieren…" öffnet ein weiteres Fenster.
Es bietet sich nur an: "Format löschen…" falls das Format nicht benutzt wird.
Wird es benutzt: Keine Chance

Bei zwei oder mehreren ausgewählten Absatzformaten:
"Formate duplizieren…"
Das sollte immer ohne Nachfrage funktionieren.


als Antwort auf: [#573269]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2759

13. Dez 2019, 14:23
Beitrag # 7 von 18
Beitrag ID: #573283
Bewertung:
(6455 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Vielleicht etikettiere ich die Absatzformate auch einfach mit insertLabel() und Infos zur ursprünglichen Gruppe und Namen.

Warum einfach, wenn's .... :-)
Code
#include WpsStylesClass.jsx; 
var /*WpsStyleClass*/ wpsParagraphStyles = new WpsStylesClass({root: app.activeDocument, type: "paragraph"});
var /*Array*/styleGroups = wpsParagraphStyles.styleGroups;
// properties(styleGroups[0]) -> parent,parentName,name,styles,path


Und hier hätte ich noch eine Alternative, mit dieser Funktion fülle ich eine DropDownList zur Auswahl eines beliebigen Formates:
Code
var /*Object*/p = {type: "paragraph", parent: app.activeDocument} 
var /*Array*/allStyles = wpsDdlStylesContentList({type: "paragraph", parent: app.activeDocument});
var /*Int*/l = allStyles.length;
var /*Array*/styleList = new Array(l);
for (var j = 0; j < l; j++)
styleList[j] = allStyles[j].value;
alert(styleList.join("\n"));

/*Array*/function wpsDdlStylesContentList(/*Object*/p)
{
var /*Array*/allStylesA = [];

getAllStyles({type: p.type, name: "/", parent: p.parent, styles: allStylesA});
return allStylesA;
/*Void*/function getAllStyles(/*Object*/p)
{
try
{
/*Style*/style = null, /*StyleGroup*/ styleGroup = 0;

for (var j = 0; j < p.parent[p.type + "Styles"].length; j++)
{
style = p.parent[p.type + "Styles"][j];
p.styles.push({name: p.name + style.name, value: p.name + style.name, id: style.id});
}
for (var j = 0; j < p.parent[p.type + "StyleGroups"].length; j++)
{
styleGroup = p.parent[p.type + "StyleGroups"][j];
getAllStyles({type: p.type, name: p.name + styleGroup.name + "/", parent: styleGroup, styles: p.styles});
}

}
catch (error)
{
// wpsHandleError(error, $.stack, "wpsDdlStylesContentList");
}
}

}


Viele Grüße
Werner


als Antwort auf: [#573275]
(Dieser Beitrag wurde von WernerPerplies am 13. Dez 2019, 14:26 geändert)

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2759

13. Dez 2019, 14:40
Beitrag # 8 von 18
Beitrag ID: #573284
Bewertung:
(6448 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Uwe,

danke, dass Du meine Idee ausprobiert hast.

Deine Idee, mit der Kopie wäre natürlich toll, wenn da die Einschränkung mit "zwei oder mehreren" nicht wäre.

Letztendlich wäre vermutlich ein eigenes DialogFenster die einzige Lösung für das Problem (wieder einmal! :-))


als Antwort auf: [#573282]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12778

13. Dez 2019, 15:15
Beitrag # 9 von 18
Beitrag ID: #573286
Bewertung:
(6442 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Werner Perplies ] Letztendlich wäre vermutlich ein eigenes DialogFenster die einzige Lösung für das Problem (wieder einmal! :-))


Im ScriptUI for dummies von Peter Kahrel gibt es auf S. 48 (v. 2.16) ein treeview-Beispiel mit eben den Absatzformaten und Absatzformatgruppen eines Dokuments.



Allerdings lässt die treeview-Liste keine Mehrfachauswahl zu. Frown
Oder täusche ich mich?


als Antwort auf: [#573284]
(Dieser Beitrag wurde von Martin Fischer am 13. Dez 2019, 15:18 geändert)

Anhang:
treeview.png (93.1 KB)

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12778

13. Dez 2019, 15:23
Beitrag # 10 von 18
Beitrag ID: #573287
Bewertung:
(6435 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Allerdings lässt die treeview-Liste keine Mehrfachauswahl zu. Frown
Oder täusche ich mich?


Diese Frage haben sich andere auch schon gestellt:

Adobe Support Community > InDesign
Creating list of checkboxes?


als Antwort auf: [#573286]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2759

13. Dez 2019, 15:36
Beitrag # 11 von 18
Beitrag ID: #573289
Bewertung:
(6428 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

das Treeview benutze ich seit CC nicht mehr, weil es damals plötzlich nicht mehr funktionierte.

Deshalb kann ich Ihnen diese Frage nicht beantworten.

Grundsätzlich können sie aber mit Sicherheit eine eigene Selektionsroutine schreiben, in dem Sie jedem selektierten Knoten einen Marker im Text hinzufügen, aber dabei funktionieren die Standardwerkzeuge zur Selektion nicht.

Ich löse solche Aufgaben je nach Anforderung mit Listboxen und DropDownlists.

Für Ihre Problematik bieten sich aus meiner sich drei Lösungen an:

1. einfache Listbox mit Pfadangaben,
2. Zwei nebeneinander liegende Listboxen
links parent, rechts childs für den links ausgewählten Eintrag, bei tieferer Schachtelung rutscht die rechte Spalte nach links, rechts wird dann mit Eintag von links gefüllt.
3. Für jede Ebene wird on the Fly ein neues Fenster mit einer Listbox für die tiefere Ebene geöffnet.

Alle drei Varianten habe ich schon verwendet.


als Antwort auf: [#573286]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2759

13. Dez 2019, 15:49
Beitrag # 12 von 18
Beitrag ID: #573290
Bewertung:
(6420 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Natürlich können Sie auch solch eine Darstellung mit einzelenen Checkboxen nachbilden, aber dass wäre dann schon eine recht anspruchsvolle Aufgabe.

Im dem von Ihnen verlinkten Beitrag wird ja auch noch CEP angesprochen.

Allgemeiner ausgedrückt können Sie natürlich auch für die Dialoge InDesign-Extendedskript komplett verlassen und eine Lösung auf PWA-Basis schreiben, dafür würde sich zum Beispiel Electron anbieten, eine von mir für die Zukunft angestrebte Lösung, aber für Sie jetzt sicher ein Overkill.


als Antwort auf: [#573287]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Uwe Laubender
Beiträge gesamt: 5314

16. Dez 2019, 11:31
Beitrag # 13 von 18
Beitrag ID: #573311
Bewertung:
(6204 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

wo Du jetzt Listboxen angesprochen hast. Da gibt's mit dem aktuellen InDesign 2020 ein Darstellungsproblem mit der Eigenschaft checked.

Hier die Details:

listitem.checked on indesign 15.0 (2020)
Laubender, Nov 12, 2019

https://community.adobe.com/...m-p/10734040#M160426

Hier etwas zum Testen:

Code
/* 

BUG with InDesign 2020 version 15.0.0.155
BUG with InDesign 2020 version 15.0.1.209

checkmarks of listbox items are NOT visible.

Property checked can have 3 values:

undefined
false
true

See discussion here:
https://community.adobe.com/t5/InDesign/listitem-checked-on-indesign-15-0-2020/m-p/10734040#M160426

*/

#targetengine "Uwe-Listbox-Test"

var x = new Window ("dialog","test win", [0,0,150,150]);
var y = x.add("listbox",[10,10,140,116]);

for (var n=0; n<7; n++)
{
y.add( "item", "test " + n );

// Leave the first two items as undefined:
if( n < 2 ){ continue };

// Set the third item to checked:
if( n == 2 ){ y.items[n].checked = true ; continue };

// All other items to unchecked:
y.items[n].checked = false ;

};

for( var n=0; n<y.items.length; n++ )
{
$.writeln( n +"\t"+ y.items[n].checked );
};

x.center();
x.show();



als Antwort auf: [#573289]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2759

16. Dez 2019, 15:19
Beitrag # 14 von 18
Beitrag ID: #573325
Bewertung:
(6183 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Uwe,

du hast recht!

Es ist schon bewundernswert, wie Adobes Programierer es immer wieder schaffen, einfache Betriebssystemmodule kapputt zu programmieren.

Ich muss also davon ausgehen, dass einige meiner Skripte unter CC2020 nicht mehr funktionieren.

Es ist also wirklich höcheste Zeit sich bei der Dialogprogrammierung von Adobe zu trennen.


als Antwort auf: [#573311]

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Uwe Laubender
Beiträge gesamt: 5314

22. Dez 2019, 20:24
Beitrag # 15 von 18
Beitrag ID: #573413
Bewertung:
(5912 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Moin Uwe,

danke, dass Du meine Idee ausprobiert hast.

Deine Idee, mit der Kopie wäre natürlich toll, wenn da die Einschränkung mit "zwei oder mehreren" nicht wäre.

Letztendlich wäre vermutlich ein eigenes DialogFenster die einzige Lösung für das Problem (wieder einmal! :-))


Hallo Werner,
neue Überlegung zum Problem mit einem ausgewählten Absatzformat:

Neuer Textrahmen dem Dokument hinzufügen mit ein wenig Inhalt.
Das zugewiesene Absatzformt des ersten Absatzes müsste das ausgewählte Format im Absatzformatbedienfeld sein.

Code
var tempFrame = app.documents[0].textFrames.add 
({ geometricBounds : [0,0,100,100] , contents : "Test" });
var selectedParaStyle = tempFrame.paragraphs[0].appliedParagraphStyle;

tempFrame.remove();

$.writeln( selectedParaStyle.name +"\r"+ selectedParaStyle.id +"\r"+ selectedParaStyle.parent );



Nun ja, das hat noch einen Haken:

Ist eine Formatgruppe ausgewählt oder es ist nichts ausgewählt, erinnert InDesign an die letzte Formatauswahl und verwendet diese für den temporären Textrahmen.


als Antwort auf: [#573284]
X