[GastForen Programmierung/Entwicklung AppleScript Gute Vorsätze 2004: reals, integers und strings

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

Gute Vorsätze 2004: reals, integers und strings

Anonym
Beiträge gesamt: 22827

6. Feb 2004, 11:43
Beitrag # 1 von 5
Bewertung:
(1171 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe AS-Cracks,

ich habe den festen Vorsatz für 2004 endlich die Geheimnisse von AS zu entmystifizieren. Hoffe das klappt besser als der Vorsatz mit dem Rauchen...

Habe ja schon so einiges fabriziert mit AS...aber oft hinten durch die Brust und mit Hilfe externer Programme.

Aber: wie ist das nun mit den Reals, Integers, Numbers etc.?

Lese ich die Bounds einer Textschachtel ein, so bekomme ich eine Liste:

tell application "QuarkXPress Passport™"
 tell document 1
 
  tell last page
   set {TBO, TBL, TBU, TBR} to bounds of last text box as list
   
  end tell
 end tell
end tell

Ergebnis:
{"12,7 mm", "12,7 mm", "38,7 mm", "96,709 mm"}

Jetzt möchte ich aber z.B einen Wert hiervon um sagen wir mal 5 erhöhen.

Und jetzt geht` los:
Geht natürlich nicht, weil die Werte jetzt Text sind.
Wie kriege ich das hin, dass ich mit den Werten auch rechnen kann?

Und dass ich dann wieder neue Textboxen damit kreieren kann??

Wäre für Eure Konvertiertipps für Zahlen echt dankbar...und will's mir dann auch merken.

Vielen Dank,

Andreas
X

Gute Vorsätze 2004: reals, integers und strings

Hans Haesler
  
Beiträge gesamt: 5826

6. Feb 2004, 13:41
Beitrag # 2 von 5
Beitrag ID: #418616
Bewertung:
(1170 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andreas,

also ich würde es mir nochmals überlegen. Denn: auch AS kann süchtig machen. ;-)

Nun zu Deiner Frage. Beim Prüfen der Syntax erhalte ich mit QuarkXPress 4.11 eine Fehlermeldung. Ich muss 'last page' in 'page -1' ändern, damit der Code akzeptiert wird. Eigenartigerweise geht 'last text box' durch. Aber mit 'text box -1' ist es einheitlicher. Ich ziehe auch vor, die Objekte direkt anzusprechen und 'of' zu vermeiden. Dadurch gibt es kürzere und lesbarere Zeilen:
---
tell document 1 of application "QuarkXPress 4.11"
  tell page -1
    tell text box -1
      set {TBO, TBL, TBU, TBR} to bounds as list
    end tell
  end tell
end tell
---
Dein Ergebnis {"12,7 mm", "12,7 mm", "38,7 mm", "96,709 mm"} sieht aus wie eine Liste von Strings, ist es aber nicht. Wenn Du am Ende des Scripts den Befehl 'class of TBO' einfügst, dann ist das Ergebnis 'vertical measurement', also eine Konstante.

Die Werte, welche man verändern will, muss man umwandeln und zwar in Bruchzahlen. Dazu benötigt man den Zusatz 'as real'.
---
tell document 1 of application "QuarkXPress 4.11"
  tell page -1
    tell text box -1
      set {TBO, TBL, TBU, TBR} to bounds as list
      set TBU to TBU as real
      set TBR to TBR as real
      set bounds to {TBO, TBL, TBU + 5, TBR + 5}
    end tell
  end tell
end tell
Code
Damit wird die Box um 5 mm höher und um 5 mm breiter. Aber aufgepasst: Damit setzt man voraus, dass die Masseinheiten 'Millimeter' sind. Man könnte die Werte durch 'as millimeter units as real' in Millimeter umwandeln lassen. Aber dann muss man beim Hinzufügen auch Eingreifen: '... ((TBU + 5) as string) & "mm", ...". Recht kompliziert. Am besten prüft man deshalb zu Beginn des Scripts, ob die Masseinheiten den Voraussetzungen entsprechen. Sonst ändert man sie temporär und setzt sie am Ende des Scripts wieder zurück. 

tell document 1 of application "QuarkXPress 4.11"
  set mes to 0
  set vMes to vertical measure
  set hMes to horizontal measure
  if vMes is not millimeters or hMes is not millimeters then
    set mes to 1
    set properties to {vertical measures, horizontal measures}
  end if
  --
  -- Hier Scriptbefehle, welche mit Millimeter-Werten ohne Masseinheits-Kürzel auskommen
  --
  if mes = 1 then set properties to {vertical measure:vMes, horizontal measure:hMes}
end tell
---
Der 'flag' mes wird auf '1' gesetzt, falls die Masseinheiten nicht 'Millimeter' sind. Am Schluss wird der Wert von 'mes' geprüft und entsprechend gehandelt.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418615]

Gute Vorsätze 2004: reals, integers und strings

Anonym
Beiträge gesamt: 22827

9. Feb 2004, 13:32
Beitrag # 3 von 5
Beitrag ID: #418617
Bewertung:
(1170 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank.

Das muss ich jetzt einaml in der Praxis probieren...

Melde mich nochmals dazu!

Gruß

Andreas


als Antwort auf: [#418615]

Gute Vorsätze 2004: reals, integers und strings

Anonym
Beiträge gesamt: 22827

20. Feb 2004, 12:40
Beitrag # 4 von 5
Beitrag ID: #418618
Bewertung:
(1170 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

als AS süchtiger (oder auch AS Quartalsirrer) lass' ich nicht locker:

Dann sag mir mal (wenn Du willst und Zeit hast) , warum das nicht geht?

Manchmal werde ich echt fast wahnsinnig...

tell application "QuarkXPress Passport&#153;"
 tell document 1
  tell page 1
   set P to "."
   set K to ","
   set {A, B, C, D} to bounds of picture box 1 as list
   set D to D as real
   set D to round D / 3
   set D to (D as string) & "mm"
   
   
   tell picture box 1
    set bounds to {A, B, C, D}
   
   end tell
  end tell
 end tell
end tell

Schönen Gruss

Andreas


als Antwort auf: [#418615]

Gute Vorsätze 2004: reals, integers und strings

Hans Haesler
  
Beiträge gesamt: 5826

20. Feb 2004, 20:50
Beitrag # 5 von 5
Beitrag ID: #418619
Bewertung:
(1170 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andreas,

was, bitte, geht nicht? Hier funktioniert es. Die beiden Variablen 'P' und 'K' werden zwar initialisiert aber nicht verwendet. Und die drei Zeilen &#133;
---
set D to D as real
set D to round D / 3
set D to (D as string) & "mm"
Code
&#133; kann man in einer zusammenfassen: 

set D to "" & (D as real) div 3 & " mm"
---
Das 'as string' zum Konvertieren in einen String kann weggelassen werden, wenn nach dem 'to' ein leerer String steht. Wenn man darauf mit '&' eine Ganzzahl anfügt, dann wird sie automatisch zum String.

Und statt mit 'round' einen Aufruf der Scripting Addition "Standard" auszulösen, verwendet man besser das AS-native 'div', um eine Bruchzahl per Division in eine Ganzzahl zu verwandeln. Dies ist viel schneller.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418615]
X