Na, wer hat es geschafft, per Script eine neue Textbox zu erzeugen, sobald
die aktuelle überläuft?
Hier ist die Lösung. Die ausgewählte Box wird einmal pro Sekunde abgefragt.
Sobald der Text überläuft, geschieht folgendes:
1. Die Positionsparameter der Box werden in die Liste {y1, x1, y2, x2} geschrieben.
'y1' ist der obere Rand, 'x1' der linke, 'y2' der untere, 'x2' der rechte.
2. Die Breite der Box wird ausgerechnet und in die Variable 'wB' gesetzt.
Die Werte der Liste sind im Format 'string' also z.B. "23 mm". Damit man
Rechenoperationen ausführen kann, müssen sie wenn nötig in Bruchzahlen verwandelt
werden. Dies geschieht mit dem Zusatz 'as real'.
3. Der neue Wert für den linken Rand wird ausgerechnet: 'set x1 to (x2 as real) + 5'.
Man setzt voraus, dass die Masseinheiten "Millimeter" sind. Bei einem "richtigen"
Script muss man dies einleitend prüfen und wenn notwendig vorübergehend ändern.
4. Der neue Wert für den rechten Rand wird ausgerechnet: 'set x2 to x1 + wB'.
5. Die neue Textbox wird erzeugt. Der Ausdruck 'bounds' bedeutet 'Grenzen'.
Die Parameter-Liste {y1, x1, y2, x2} enthält die "alten" vertikale Werte (y1, y2)
und die neuen horizontalen (x1, x2), weil die neue Box rechts von der alten erzeugt
werden soll. XPress hat kein Problem mit der Mischung von 'string' und 'real'.
6. Die aktuelle Box wird mit der neuen verkettet. Diese kann mit 'text box 1'
adressiert werden, weil sie 'at beginning', also ganz vorne, erzeugt wurde.
7. Mit dem Befehl 'set selected of text box 1 to true' wird die neue Box ausgewählt,
sonst funktioniert die Sache nicht. Die erste Box wäre immer noch selektiert und
beim Abfragen würde 'box overflows' nicht mehr 'true' sondern 'false' ergeben und
der ganze if-Block würde nicht ausgeführt.
---
on idle
checkBox()
return 1 -- ein Mal pro Sekunde wird die Textbox abgefragt
end idle
on checkBox()
tell document 1 of application "QuarkXPress 4.11"
try
if box overflows of current box is true then
set {y1, x1, y2, x2} to bounds of current box as list
set wB to (x2 as real) - (x1 as real)
set x1 to (x2 as real) + 5
set x2 to x1 + wB
make text box at beginning with properties {bounds:{y1, x1, y2, x2}}
set next text box of current box to text box 1
set selected of text box 1 to true
end if
end try
end tell
end checkBox
---
Damit alles klappt, sollte die erste Box nur klein (ungefähr 40 mm breit und 16 mm
hoch) sein und am linken Rand der Seite liegen. Ach ja: es sollte ein Einzel-Seiten-
Dokument sein. Bei einem doppelseitigen muss man die Box auf eine linke Seite
stellen oder in den Vorgaben die Objektkoordinaten auf "Montagefläche" setzten.
Dies könnte man auch per Script vornehmen, aber dieses theoretische Beispiel wird
ja kaum jemand in der Praxis einsetzen. Oder?
Hans Haesler
als Antwort auf: [#417978]