Hallo Andreas,
schaust Du immer so grimmig drein? ;-)
Bevor man Deine Liste sortieren kann, müssen die Elemente in Zahlen verwandelt werden. Dann kann man sie mit einer
der vielen Sortierungs-Routinen der Grösse nach sortieren. Aber dies hilft Dir überhaupt nicht weiter. Besser ist,
den Index der Boxen einzubeziehen, also eine Liste von Listen aufstellen und das Sortieren nach dem Element 'top of
bounds' vorzunehmen.
Das gelingt aber nicht mit der Formulierung '... every text box...'. Man muss eine leere Liste initialisieren und dann
mit einer Wiederholungsschleife die Boxen eine nach der anderen abfragen und bei jeder den Wert des Zählers und des
'top of bounds' an die Liste anhängen. Bei dieser Gelegenheit kann man auch die Umwandlung in einen Bruch vornehmen.
Das Ergebnis sieht dann etwa so aus:
Diese Liste von Listen wird mit einer komplizierten Routine nach dem zweiten Wert jedes Elements sortiert:
Dann kann man das Ergebnis benutzen und den ersten Wert jedes Elements zum Ansprechen der Boxen benutzen.
Der Zähler der Repeat-Schleife ist 'k'. Der Wert von 'k' beim ersten Durchgang ist 1. Demnach ist 'item k of boxList' das erste
Element der sortierten Liste und das 'item 1' davon ist der Index der entsprechenden Box.
Zuerst kommt die Box 3 an die Reihe, dann die 2 und zum Schluss die 1.
---
tell document 1 of application "QuarkXPress 4.11"
set boxRefs to {}
tell page 1
repeat with i from 1 to count of text boxes
set end of boxRefs to {i, (top of bounds of text box i as real)}
end repeat
if boxRefs is not {} then
-- die Liste nach Position sortieren
set boxList to my sortList(1, count of items of boxRefs, boxRefs, 2)
-- ... dann die Boxen der Reihe nach abarbeiten
repeat with k from 1 to (count of items of boxList)
tell text box (item 1 of (item k of my boxList))
--
-- hier Aktionen einfügen, z.B.:
set y1 to top of bounds
display dialog y1
--
end tell
end repeat
end if
end tell
end tell
on sortList(startWith1, itemCount, aList, elementToSortOn)
set leftCounter to startWith1
set rightCounter to itemCount
set midItem to item elementToSortOn of (item ((startWith1 + itemCount) div 2) of aList)
repeat until rightCounter <= leftCounter
repeat while item elementToSortOn of (item leftCounter of aList) < midItem
set leftCounter to leftCounter + 1
end repeat
repeat while item elementToSortOn of (item rightCounter of aList) > midItem
set rightCounter to rightCounter - 1
end repeat
if leftCounter <= rightCounter then
set astore to item leftCounter of aList
set item leftCounter of aList to item rightCounter of aList
set item rightCounter of aList to astore
set leftCounter to leftCounter + 1
set rightCounter to rightCounter - 1
end if
end repeat
if startWith1 < rightCounter then
my sortList(startWith1, rightCounter, aList, elementToSortOn)
end if
if itemCount > leftCounter then
my sortList(leftCounter, itemCount, aList, elementToSortOn)
end if
return aList
end sortList
---
HTH (= Hope This Helps = hoffe, dass dies hilft :-)
Hans Haesler, hsa@ringier.ch