[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Dialogeingabe - Größe Textrahmen

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

Dialogeingabe - Größe Textrahmen

MarioF
Beiträge gesamt: 390

12. Mai 2019, 23:23
Beitrag # 1 von 3
Bewertung:
(18026 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich beschäftige mich mal wieder mit dem Thema Scripten und bastele an einem Lernstück.
Dazu habe ich eine Dialogbox erstellt, über die man einen Textrahmen anlegen kann. Dabei kann die Größe des TR eingetragen werden. Der Textrahmen wird dann erstellt:
Code
//Maßeinheit Linial auf mm setzen 
_dok.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.millimeters;
_dok.viewPreferences.verticalMeasurementUnits = MeasurementUnits.millimeters;

//Textrahmen erstellen
// Koordinaten + Angaben zu Höhe und Breite
var _tfPos = [10, 10]; // y1, x1 oben links
var _tfHoehe = _tfH.text;
var _tfBreite = _tfB.text;

// aktive Seite
var _tfPage = app.layoutWindows[0].activePage;

// Textrahmen auf der aktiven Seite erstellen
var _tfN = _tfPage.textFrames.add();

// Textrahmen Position, Breite und Höhe zuweisen
_tfN.geometricBounds = [_tfPos[0], _tfPos[1], _tfPos[0] + _tfHoehe, _tfPos[1] + _tfBreite];
_tfN.name = "_tf1"
_tfN.contents = "Breite: " + _tfB.text +"\rHöhe: " + _tfH.text + "\r" + _tfT.text;


Gebe ich bei Breite und Höhe 1 ein, hat der TR eine Größe von 91mm, bei 2 eine Größe von 92mm und bei 10 eine Größe von 1000 mm.

Wieso rechnet er die Werte so um?

Hier das gesamte Script:
Code
var _tf = new Window("dialog"); 
_tf.text = "Neuer Textrahmen";
_tf.preferredSize.width = 400;
_tf.preferredSize.height = 300;
_tf.orientation = "column";
_tf.alignChildren = ["center", "top"];
_tf.spacing = 10;
_tf.margins = 16;

// PANEL1
// ======
var panel1 = _tf.add("panel");
panel1.text = "Textrahmengröße";
panel1.orientation = "column";
panel1.alignChildren = ["left", "top"];
panel1.spacing = 10;
panel1.margins = 10;
panel1.alignment = ["left", "top"];

var statictext1 = panel1.add("group");
statictext1.orientation = "column";
statictext1.alignChildren = ["left", "center"];
statictext1.spacing = 0;
statictext1.alignment = ["left", "top"];

statictext1.add("statictext", undefined, "");
statictext1.add("statictext", undefined, "Breite mm");

var _tfB = panel1.add("edittext");
_tfB.preferredSize.width = 100;
_tfB.alignment = ["left", "top"];

var statictext2 = panel1.add("group");
statictext2.orientation = "column";
statictext2.alignChildren = ["right", "center"];
statictext2.spacing = 0;

statictext2.add("statictext", undefined, "");
statictext2.add("statictext", undefined, "Höhe mm");

var _tfH = panel1.add("edittext");
_tfH.preferredSize.width = 100;
_tfH.alignment = ["left", "top"];

// PANEL2
// ======
var panel2 = _tf.add("panel");
panel2.text = "Text";
panel2.orientation = "column";
panel2.alignChildren = ["left", "top"];
panel2.spacing = 10;
panel2.margins = 10;
panel2.alignment = ["left", "top"];

var _tfCheck = panel2.add("checkbox");
_tfCheck.value = true;
_tfCheck.text = "Text platzieren";

var _tfT = panel2.add("edittext", [0, 0, 400, 80], undefined, { multiline: true });
_tfT.text = "EditText";

// _TF
// ===
var button1 = _tf.add("button");
button1.text = "OK";
button1.preferredSize.width = 200;
button1.justify = "center";

_tf.show();

var _dok = app.activeDocument;

//Maßeinheit Linial auf mm setzen
_dok.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.millimeters;
_dok.viewPreferences.verticalMeasurementUnits = MeasurementUnits.millimeters;

//Textrahmen erstellen
// Koordinaten + Angaben zu Höhe und Breite
var _tfPos = [10, 10]; // y1, x1 oben links
var _tfHoehe = _tfH.text;
var _tfBreite = _tfB.text;

// aktive Seite
var _tfPage = app.layoutWindows[0].activePage;

// Textrahmen auf der aktiven Seite erstellen
var _tfN = _tfPage.textFrames.add();

// Textrahmen Position, Breite und Höhe zuweisen
_tfN.geometricBounds = [_tfPos[0], _tfPos[1], _tfPos[0] + _tfHoehe, _tfPos[1] + _tfBreite];
_tfN.name = "_tf1"
_tfN.contents = "Breite: " + _tfB.text +"\rHöhe: " + _tfH.text + "\r" + _tfT.text;

X

Dialogeingabe - Größe Textrahmen

Hans Haesler
  
Beiträge gesamt: 5826

13. Mai 2019, 08:54
Beitrag # 2 von 3
Beitrag ID: #570134
Bewertung:
(17383 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mario,

die Werte, welche der Dialog zurückgibt, sind Strings. Diese werden nicht zur Zahl 10 addiert, sondern mit dieser zu einer neuen Textkette zusammengesetzt.

Diese kurze Demo ...
Code
alert (10 + "1"); 

... zeigt "101" an.

*****
Abhilfe: Die erhaltenen Strings durch Multiplizieren mit 1 in Zahlen verwandeln:

Code
var _tfHoehe  = _tfH.text*1; 
var _tfBreite = _tfB.text*1;

In den Zeilen 80 und 81.

*****
Eine korrektere Alternative wäre das Einsetzen der Number-Methode:

Code
var _tfHoehe  = Number(_tfH.text); 
var _tfBreite = Number(_tfB.text);

Siehe https://www.w3schools.com/...s_number_methods.asp
Hinunterscrollen bis Global JavaScript Methods, unter welchen auch parseInt() und parseFloat() demonstriert werden.

Gruss, Hans


als Antwort auf: [#570132]
(Dieser Beitrag wurde von Hans Haesler am 13. Mai 2019, 09:10 geändert)

Dialogeingabe - Größe Textrahmen

MarioF
Beiträge gesamt: 390

13. Mai 2019, 10:32
Beitrag # 3 von 3
Beitrag ID: #570135
Bewertung:
(17235 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
vielen Dank für Deine Erklärung. Wieder etwas Licht im Dunkeln.


als Antwort auf: [#570134]