[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Dropdown Dialog mit den UI-Farben

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

Dropdown Dialog mit den UI-Farben

Kai Rübsamen
Beiträge gesamt: 4632

15. Okt 2009, 21:00
Beitrag # 1 von 13
Bewertung:
(32890 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ich würde gerne einen Dialog erstellen in dem der User die UIColors auswählen kann. Das Problem ist, das der Dialog eine stringList erwartet, meine UIColors aber lieber eine Number sein wollen.

Daher geht folgendes nicht:

Code
doc = app.activeDocument; 
myColors = [UIColors.TEAL, UIColors.ORANGE,UIColors.RED];
d = app.dialogs.add({name:"Auswählen der Ebenenfarbe"});
d.dialogColumns.add().staticTexts.add({staticLabel:"Farbe:"});

dd = d.dialogColumns.add().dropdowns.add({stringList:myColors});


Ich dachte man könnte viell. die Number in einen String umwandeln aber ein Test mit
Code
var a = String (myColors); 
a = UIColors.TEAL
a.constructor.name

ergibt immer noch Number?

> Wie muss ich das Script schreiben damit der User Teal, Orange, Red auswählen kann, intern aber mit den Angaben in myColors weitergearbeitet werden kann?
Gruß Kai Rübsamen
Hier Klicken X

Dropdown Dialog mit den UI-Farben

Kai Rübsamen
Beiträge gesamt: 4632

15. Okt 2009, 21:18
Beitrag # 2 von 13
Beitrag ID: #411421
Bewertung:
(32828 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, Hans hat mir erklärt das ich zwei Listen erstellen muss:

1. die Liste die die Namen enthält die ich im Dialog auswählen lasse
2. die Liste mit der das Script weiterarbeiten kann

Demnach hab ich jetzt mal folgendes zusammengeschustert:

Code
doc = app.documents[0]; 
dialogNames = ["Türkis", "Orange", "Rot"];

d = app.dialogs.add({name:"Wähle eine Ebenenfarbe"});
// fügt eine Dialogspalte hinzu
d.dialogColumns.add().staticTexts.add({staticLabel:"Ebenenfarbe:"});

// fügt eine weitere Dialogspalte hinzu
dd = d.dialogColumns.add().dropdowns.add({stringList:dialogNames});

// zeigt die Dialogbox
myResult = d.show();

if (myResult == true){
var index = dd.selectedIndex;
d.destroy();
} else {
d.destroy();exit();
}

oldLayer = doc.activeLayer;
newLayer = doc.activeLayer.duplicate();
newLayer.name = "Neu";
colorValues = [UIColors.TEAL, UIColors.ORANGE, UIColors.RED];
newLayer.layerColor = colorValues[index];
oldLayer.visible = false;


Ist das umständlich oder macht man das so?
Gruß Kai Rübsamen


als Antwort auf: [#411417]
(Dieser Beitrag wurde von Kai Rübsamen am 15. Okt 2009, 21:26 geändert)

Dropdown Dialog mit den UI-Farben

Gerald Singelmann
  
Beiträge gesamt: 6219

15. Okt 2009, 23:11
Beitrag # 3 von 13
Beitrag ID: #411426
Bewertung:
(32801 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Der Ansatz ist genau richtig. Einige Details gefallen mir nicht.
Code
var doc = app.documents[0];  
var dialogNames = ["Türkis", "Orange", "Rot"];
var colorValues = [UIColors.TEAL, UIColors.ORANGE, UIColors.RED];

var d = app.dialogs.add({name:"Wähle eine Ebenenfarbe"});
// fügt eine Dialogspalte hinzu
d.dialogColumns.add().staticTexts.add({staticLabel:"Ebenenfarbe:"});

// fügt eine weitere Dialogspalte hinzu
var dd = d.dialogColumns.add().dropdowns.add({stringList:dialogNames});

// zeigt die Dialogbox
var myResult = d.show();

if (myResult == true){
var index = dd.selectedIndex;
d.destroy();
} else {
d.destroy();
exit();
}

var oldLayer = doc.activeLayer;
var newLayer = doc.activeLayer.duplicate();
newLayer.name = "Neu";
newLayer.layerColor = colorValues[index];
oldLayer.visible = false;


Gewöhn dir besser nicht an, Variablen ohn "var" einzuführen.
Wenn du zwei parallele Listen verwendet, deklariere sie am besten auch nebeneinander, damit klar ist, was da zusammenhängt.

Falls du keine Lust hast zu tippen, hier die volle Liste:
Code
ui_colors = [UIColors.LIGHT_BLUE, UIColors.RED, UIColors.GREEN, UIColors.BLUE, UIColors.YELLOW, UIColors.MAGENTA, UIColors.CYAN, UIColors.GRAY, UIColors.BLACK, UIColors.ORANGE, UIColors.DARK_GREEN, UIColors.TEAL, UIColors.TAN, UIColors.BROWN, UIColors.VIOLET, UIColors.GOLD, UIColors.DARK_BLUE, UIColors.PINK, UIColors.LAVENDER, UIColors.BRICK_RED, UIColors.OLIVE_GREEN, UIColors.PEACH, UIColors.BURGUNDY, UIColors.GRASS_GREEN, UIColors.OCHRE, UIColors.PURPLE, UIColors.LIGHT_GRAY, UIColors.CHARCOAL, UIColors.GRID_BLUE, UIColors.GRID_ORANGE, UIColors.FIESTA, UIColors.LIGHT_OLIVE, UIColors.LIPSTICK, UIColors.CUTE_TEAL, UIColors.SULPHUR, UIColors.GRID_GREEN, UIColors.WHITE ]; 


Edit 8.11.14: Hans Haesler macht mich grad drauf aufmerksam, dass in meinem Codeschnipsel aus ungeklärtem Grund zwei Farben fehlen, nämlich Gelb und Cyan. Das habe ich korrigiert.

Ergänzend hier auch noch der Code-Schnipsel, mit dem man sich die Liste selbst erstellen kann, ohne den Kram abzutippen. Die For-In Schleife kennt vielleicht auch noch nicht jeder...?

Code
$.write( "ui_colors = [" ); 
var uic = [];
for (var name in UIColors) {
uic.push( "UIColors." + name );
}
$.write( uic.join(", ") );
$.writeln( " ];");



als Antwort auf: [#411421]
(Dieser Beitrag wurde von Gerald Singelmann am 8. Nov 2014, 18:21 geändert)

Dropdown Dialog mit den UI-Farben

Kai Rübsamen
Beiträge gesamt: 4632

16. Okt 2009, 07:48
Beitrag # 4 von 13
Beitrag ID: #411431
Bewertung:
(32772 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für´s drübersehen und kommentieren. Das mit den Listen leuchtet mir ein.

Zitat Gewöhn dir besser nicht an, Variablen ohn "var" einzuführen.

Ohne jetzt hier eine Grundsatzdiskussion führen zu wollen:
Peter Kahrel hat mir erklärt das das Einführen von Variablen außerhalb von Funktionen mit "var" nicht notwendig ist.

Da ich noch an meinem Schreibstil feile, lasse ich seit zwei Wochen das "var" außerhalb von Funktionen sowie generell Sachen wie "myDoc", "myLayer" weg.

"myResult" habe ich verwendet weil dieses Beispiel mein erster Dialog war und es mir so doch klarer wurde.

edit: Hans hatte mir den Wink mit den zwei Listen schon vor längerer Zeit gegeben. Irgendwie hatte ich es aber auf diesem Weg bis gestern nicht hinbekommen und doch noch auf eine Lösung in einer Liste gehoffft.
Gruß Kai Rübsamen


als Antwort auf: [#411426]
(Dieser Beitrag wurde von Kai Rübsamen am 16. Okt 2009, 08:06 geändert)

Dropdown Dialog mit den UI-Farben

Martin Fischer
  
Beiträge gesamt: 12137

16. Okt 2009, 09:25
Beitrag # 5 von 13
Beitrag ID: #411449
Bewertung:
(32743 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Peter Kahrel hat mir erklärt, daß das Einführen von Variablen außerhalb von Funktionen
> mit "var" nicht notwendig ist.

Die Aussage von Peter überrascht mich.
Selbst wenn es nicht nötig ist, ist es so übersichtlicher.

Da halte ich es eher mit Gerald.
Wenn man var grundsätzlich verwendet, dann vergisst man es nicht, wenn's mal tatsächlich nötig ist. ;-)

Schadet's?

Viele Grüße
Martin




als Antwort auf: [#411431]

Dropdown Dialog mit den UI-Farben

Gerald Singelmann
  
Beiträge gesamt: 6219

16. Okt 2009, 09:39
Beitrag # 6 von 13
Beitrag ID: #411457
Bewertung:
(32741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Ohne jetzt hier eine Grundsatzdiskussion führen zu wollen:

Nö, dazu sind wir auch alle nicht Informatiker genug.

Mir passier es nur sehr häufig, wenn ich eine Skizze erst mal global geschrieben habe, dass ich den Code nachträglich in eine Funktion schiebe.
Außerdem hilft es bei der Lesbarkeit, wenn ich weiß, wo eine Variable eingeführt wurde.

Aber each to his own.


als Antwort auf: [#411431]

Dropdown Dialog mit den UI-Farben

Kai Rübsamen
Beiträge gesamt: 4632

16. Okt 2009, 09:42
Beitrag # 7 von 13
Beitrag ID: #411458
Bewertung:
(32738 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Schadet's?

Nein.

Ich habe gestern ein Script von Marc Autret mit dieser Schreibweise gesehen:
var p, pItems = app.activeDocument.allPageItems;

Das fand ich bei wenigen Variablen auch recht übersichtlich.

edit: Gero mit der Lesbarkeit hapert es in der Tat in meiner Variante oder es ist einfach nur eine Frage der Gewöhnung ...
Gruß Kai Rübsamen


als Antwort auf: [#411449]
(Dieser Beitrag wurde von Kai Rübsamen am 16. Okt 2009, 09:44 geändert)

Dropdown Dialog mit den UI-Farben

Uwe Laubender
Beiträge gesamt: 4506

16. Okt 2009, 11:01
Beitrag # 8 von 13
Beitrag ID: #411466
Bewertung:
(32716 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, zusammen!
var oder nicht var, das ist hier die Frage.

Wenn ich in die JavaScript-Core-Dokumentation reinschaue, dann steht dort unter der Abteilung "delete" Folgendes:

Zitat delete

The delete operator deletes an object, an object's property, or an element at a specified index in an array.

delete y // returns false (cannot delete if declared with var)

Da ich bisher noch nicht im Zusammenhang mit Variablen mit "delete" gearbeitet habe, hier ein kleiner Test:
Code
var myDoc = app.activeDocument; 
var myContents = myDoc.textFrames[0].contents = "Text";
delete myContents;

//Ergebnis: false

Ohne var das Ganze:
Code
myContens = myDoc.textFrames[0].contents = "Text"; 

//Die Variable wird entsorgt, kann also später ohne Gefahr noch einmal neu definiert werden:
delete myContents;

//Ergebnis: true

Wir sollten das bei der Deklaration von Variablen im Hinterkopf behalten.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#411458]

Dropdown Dialog mit den UI-Farben

Peter Kahrel
Beiträge gesamt: 182

16. Okt 2009, 14:04
Beitrag # 9 von 13
Beitrag ID: #411526
Bewertung: ||
(32686 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
The first thing that comes to mind in these lines:

var doc = app.documents[0];
var dialogNames = ["Türkis", "Orange", "Rot"];
var colorValues = [UIColors.TEAL, UIColors.ORANGE, UIColors.RED];

is that doc, dialogNames, and coloValues are not variables, but constants. So it would seem better to decalre as such:

const doc = app.documents[0];
const dialogNames = ["Türkis", "Orange", "Rot"];
const colorValues = [UIColors.TEAL, UIColors.ORANGE, UIColors.RED];

The advantage of using const is that constants cannot be redefined, protecting the contents of the defined constants.

As to the readability of variable names, if you want to distinguish them from InDesign's properties and methods, then why use the same naming convention of space-less title case with initial lower case (as in dialogNames)? I would make sure that my variables are easily recognisable as my own. For example, for variable and function names I've been using dialog_names: underscores for spaces, no capitals. No confusion.

Regards,

Peter


als Antwort auf: [#411466]

Dropdown Dialog mit den UI-Farben

Hans Haesler
  
Beiträge gesamt: 5750

17. Okt 2009, 10:34
Beitrag # 10 von 13
Beitrag ID: #411571
Bewertung:
(32648 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Peter,

with due respect, but ...

Die Deklaration als Konstante schützt nur den Array als Ganzes: Dessen Name kann nicht benutzt werden, um ihm direkt einen anderen Inhalt zuzuweisen.

Aber: Die einzelnen Elemente können verändert werden. Und mit 'push()' oder 'pop()' auch deren Anzahl. Und auf diesem Umweg ebenfalls der Inhalt.

Code
const dialogNames = ["Türkis", "Orange", "Rot"];  
alert (dialogNames[2]);
dialogNames[2] = dialogNames[2] + "e";
alert (dialogNames[2]);

const colorValues = [UIColors.TEAL, UIColors.ORANGE, UIColors.RED];
alert (colorValues[2]);
colorValues[2] = colorValues[2] + 69640;
cv3 = colorValues.pop();
alert (cv3);
alert (colorValues.length);

Damit das RED nicht in SULPHUR geändert werden kann, müssten die Werte einzeln deklariert werden:

Code
const Türkis = UIColors.TEAL; 
const Orange = UIColors.ORANGE;
const Rot = UIColors.RED;
alert (Rot);

Rot = Rot + 69640;
alert (Rot);

Best regards, Hans


als Antwort auf: [#411526]

Dropdown Dialog mit den UI-Farben

Peter Kahrel
Beiträge gesamt: 182

17. Okt 2009, 10:44
Beitrag # 11 von 13
Beitrag ID: #411575
Bewertung:
(32645 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello Hans,

Well, I had assumed that those two arrays weren't going to change. If they are going to change, then you're quite right, they should indeed not be declared as constants.

Regards,

Peter


als Antwort auf: [#411571]

Dropdown Dialog mit den UI-Farben

Hans Haesler
  
Beiträge gesamt: 5750

17. Okt 2009, 11:18
Beitrag # 12 von 13
Beitrag ID: #411578
Bewertung:
(32634 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello Peter,

your assumption is correct: those arrays are not supposed to be changed.

I just wanted to demonstrate that an array, which is declared as a constant, can be redefined quite easily.

Best regards, Hans


als Antwort auf: [#411575]

Dropdown Dialog mit den UI-Farben

Peter Kahrel
Beiträge gesamt: 182

17. Okt 2009, 12:20
Beitrag # 13 von 13
Beitrag ID: #411582
Bewertung:
(32626 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ah -- I see what you mean now. Of course. The advantage of using const is still that (in this case) the names of the arrays cannot be accidentally used for something else. But you're right that const doesn't lock the contents of array constants in the way that it does string and number constants.

Thanks,

Peter


als Antwort auf: [#411578]
X

Aktuell

PDF / Print
PitStop_2019

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?