Hallo KWS,
wo liegt denn Tschuldigung? In Rodgau ist ja allerhand los: Lauftreff, Frauenzimmer, RadfahrerInnen-Club, Drachenclub... ;-)
Zu Deinem Problem. Die 'bounds', also die vier Positions-Parameter von Boxen ('top of bounds' = oberer Rand, 'left of bounds' = linker Rand, 'bottom of bounds' = unterer Rand, 'right of bounds' = rechter Rand) werden als 'measurement rectangle' = Masseinheiten-Rechteck zurückgegeben. Versuche es selbst und wähle Deine Musterbox aus (das Quadrat von 50 x 50 mm mit der Position x = 0, y = 0) und führe folgendes Script aus (Tip: wenn Du den Namen der Programm-Datei auf "QuarkXPress 4.11" kürzest, dann musst Du etwas weniger tippen):
---
tell document 1 of application "QuarkXPress 4.11"
tell current box
set boxBounds to bounds
end tell
end tell
---
Das Ergebnisfenster zeigt eine Liste von Textketten: {"0 mm", "0 mm", "50 mm", "50 mm"}
Wenn man das Script mit der Zeile 'class of boxBounds' ergänzt, sich also nach der Klasse des Resultats erkundigt, dann erhält man als Antwort: 'measurements rectangle' (das erwähnte Masseinheiten-Rechteck). Also keine "normale" Liste.
Ein ähnliches Ergebnis erhält man mit folgendem Script, welches die Klasse des oberen Randes untersucht:
---
tell document 1 of application "QuarkXPress 4.11"
tell current box
set y1 to top of bounds
end tell
end tell
--> "0 mm"
Sieht aus wie ein String (eine Textkette), weil mit An- und Abführungszeichen eingefasst. Ist aber keiner:
---
tell document 1 of application "QuarkXPress 4.11"
tell current box
set y1 to top of bounds
end tell
end tell
class of y1
--> vertical measurement (also eine Konstante, eine senkrechte Masseinheit).
Die 'bounds' müssen zu Beginn als Liste verlangt werden. Ein Kurzverfahren setzt die Variablen für die vier Komponenten (top, left, bottom, right) in eine Liste: 'set {y1, x1, y2, x2} to bounds as list' – und schon ist das 'measurements rectangle' in eine Liste konvertiert.
Nun müssen die vier Werte in Bruchzahlen (= 'as real') verwandelt werden (z.B. = 'set y1 to y1 as real'), damit man die Vergleiche mit den Vorgabewerten in der Liste 'boxlist' anstellen kann. Dazu gibt es verschiedene Wege.
Mit Deinem Beispiel siehst Du es richtig: mit einer Repeat-Schleife die Textboxen ansprechen und dann die Bounds mit den Werten der vorgegebenen Liste vergleichen. Aber statt auch eine Repeat-Schleife durch die Liste zu machen, kann man ganz einfach fragen, ob die Bounds-Werte der aktuellen Box in der Liste stehen:
---
set boxlist to {{0, 0, 50, 50}, {10, 10, 60, 60}, {20, 20, 70, 70}}
tell document 1 of application "QuarkXPress 4.11"
activate
repeat with i from 1 to count of text boxes
tell text box i
set {y1, x1, y2, x2} to bounds as list
set realValues to {{y1 as real, x1 as real, y2 as real, x2 as real}}
if realValues is in boxlist then
set AppleScript's text item delimiters to {", "}
display dialog "Bounds: " & realValues & "
Habe die Box gefunden!" buttons "OK" default button 1 with icon 1
set AppleScript's text item delimiters to {""}
end if
end tell
end repeat
end tell
---
Die 'AppleScript's delimiters' werden auf "Komma und Zwischenraum" gesetzt, damit beim Anzeigen die vier Werte getrennt werden. Den Dialog kannst Du durch die gewünschte Aktion ersetzen.
Achtung: wenn eine Box einen (oder mehrere) vermeintlich geraden Wert aufweist (z.B. "50 mm"), der aber in Wirklichkeit von "49.9999" in der Masspalette aufgerundet wurde, dann wird die Box nicht erkannt.
Trotzdem: viel Erfolg und viel Spass!
Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418370]