[GastForen Programmierung/Entwicklung AppleScript QuarkXPress-Textboxen "auto-magisch" verketten

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

QuarkXPress-Textboxen "auto-magisch" verketten

Hans Haesler
  
Beiträge gesamt: 5826

1. Nov 2002, 13:21
Beitrag # 1 von 3
Bewertung:
(2227 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

funktionierts über ATM oder Suitcase auch nicht?

Sind evtl. die Betriebssysteme der Rechner unterschiedlich?
Oder evtl. auch unterschiedliche Druckertreiber oder PPDs??

Ansonsten weiß ich leider auch nix.
X

QuarkXPress-Textboxen "auto-magisch" verketten

Hans Haesler
  
Beiträge gesamt: 5826

26. Okt 2002, 10:45
Beitrag # 2 von 3
Beitrag ID: #417979
Bewertung:
(2226 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kürzlich wurde ich angefragt, ob es möglich ist, dass eine QuarkXPress-Textbox per
Script mit einer anderen verkettet werden kann. Genauer: "Wenn ich Text in die erste
Box tippe und diese überläuft sollte - ohne manuellen Eingriff - die zweite Box mit
der ersten verkettet werden, so dass ich ungebremst weiter tippen kann."

Meine Antwort war: "Das ist nicht möglich. Man kann zwar Textboxen per Script
verketten. Aber dass dies auto-magisch während des Tippens ausgelöst wird...
Da kann ich mir nur ein Script vorstellen, welches im Hintergrund läuft und ständig
die ausgewählte Textbox überwacht."

Gesagt, getan: ein paar Minuten später hatte ich ein funktionierendes Script:
---
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 next text box of current box to text box 1
      end if
    end try
  end tell
end checkBox
---

QuarkXPress starten. Den Script Editoren starten und obige Zeilen in das leere Fenster
kopieren. Syntax prüfen und sichern: einen Namen tippen, z.B. "LinkBoxes.app" und
im Pop-up-Menü "Format" den Artikel "Classic Applet" wählen. Die beiden Checkboxen
aktivieren (den Start-up Screen nicht zeigen und im Hintergrund bleiben).

Im QuarkXPress-Dokument eine (kleine) Textbox erzeugen. Und noch eine zweite. Dann das
Script durch Doppelklick starten (es läuft im Hintergrund, erscheint im Programm-Umschalter,
kann dort ausgewählt und mit Befel-Q beendet werden). In der ersten Box Text eingeben.
Das Script sieht ein Mal pro Sekunde nach, ob die Box nicht endlich überfliesst. Sobald
dies der Fall ist, werden die beiden Boxen verkettet.

Man kann weitertippen. Bevor die zweite Box überläuft eine dritte Box erzeugen. Diese
wird auch in die Textkette aufgenommen, sobald die Überfluss-Bedingung erfüllt ist.

Fragt mich bitte nicht, in welchem realen Kontext dieses Script nützlich ist. Ich habe
noch keine Rückmeldung von meiner Korrespondentin (!) erhalten und weiss immer noch nicht,
warum sie die Boxen nicht manuell linken will.

Aber als praktische Übung war die Sache recht nett. Apropos Übung: wer schafft es, die
zweite Box durch das Script zu erzeugen? Die Werte für Grösse und Position können von
den Parametern der ersten Box ausgehend berechnet werden.

Hans Haesler


als Antwort auf: [#417978]

QuarkXPress-Textboxen "auto-magisch" verketten

Hans Haesler
  
Beiträge gesamt: 5826

1. Nov 2002, 13:21
Beitrag # 3 von 3
Beitrag ID: #417980
Bewertung:
(2226 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]