[GastForen Programmierung/Entwicklung AppleScript Position der Textgrundlinie der aktuellen Zeile ermitteln

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

Position der Textgrundlinie der aktuellen Zeile ermitteln

Anonym
Beiträge gesamt: 22827

10. Apr 2005, 19:12
Beitrag # 1 von 4
Bewertung:
(705 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
wie schon im Titel angegeben möchte ich die Position der Grundlinie ermitteln.
Das funktioniert dann ungefähr so:

set position to ((baseline of text of line 3 of current box) as point units) as real

Mein Problem: wie referenziere ich die Zeile, in der die Texteinfügemarke steht? Ich möchte ja nicht grundsätzlich die 3. Textzeile ermitteln - wie im Beispiel oben dargestellt.

Besten Dank für Eure Hilfe,
Orlandoo
X

Position der Textgrundlinie der aktuellen Zeile ermitteln

Hans Haesler
  
Beiträge gesamt: 5826

10. Apr 2005, 21:58
Beitrag # 2 von 4
Beitrag ID: #419466
Bewertung:
(704 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Orlandoo,

willkommen im dtpro-AppleScript-Forum! :-)

Welche Version von QuarkXPress benutzest Du? Unter welchem Mac OS?

Zu Deiner Codezeile: Nicht alle Adressierungen in einer Zeile unterbringen, sondern mehr 'tell'-Blocks einfügen.
Damit vermeidet man unübersichtliche Wiederholungen.
---
tell document 1 of application "QuarkXPress 6.5"
   tell current box
      tell story 1
         tell line 3
            set basePos to baseline as point units as real
         end tell
      end tell
   end tell
end tell

---
Wie Du siehst, habe ich Dein 'position' – welches ein reservierter Ausdruck ist –, durch den "hausgemachten"
Variablen-Namen 'basePos' ersetzen müssen. Und 'of text' ist nicht notwendig.

Leider wird mit QXP 6.x nur die Auswahl direkt unterstützt:
---
tell document 1 of application "QuarkXPress 6.5"
   tell selection
      set basePos to baseline of character 1 as point units as real
   end tell
end tell

---
Wenn nur die Einfügemarke blinkt, dann würde dies eine Fehlermeldung auslösen. Deshalb setze man vorsichtshalber
die folgende Version ein. Wobei ein Test vorher sicherstellen muss, dass eine Textbox ausgewählt ist.
---
tell document 1 of application "QuarkXPress 6.5"
   tell selection
      set insPoint to offset of (get object reference)
   end tell
   tell current box
      tell story 1
         set basePos to baseline of character (insPoint + 1) as point units as real
      end tell
   end tell
end tell

---
Der Wert 'offset of' enthält die Anzahl Zeichen, welche vor der Einfügemarke (oder des ersten Zeichens der Auswahl)
stehen. Deshalb muss man eines dazuzählen (= '(insPoint + 1)'), damit der Grundlinienwert der richtigen
Zeile zurückgegeben wird, wenn die Marke zu Beginn einer Zeile blinkt.

Gruss, Hans


als Antwort auf: [#419465]

Position der Textgrundlinie der aktuellen Zeile ermitteln

Anonym
Beiträge gesamt: 22827

11. Apr 2005, 20:27
Beitrag # 3 von 4
Beitrag ID: #419467
Bewertung:
(704 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
erstmal ein dickes Dankeschön für Deine schnelle und ausführliche Antwort!
Ich nutze Quark 6.5 unter OS X 10.3.8.

Beste Grüße,
Orlandoo


als Antwort auf: [#419465]

Position der Textgrundlinie der aktuellen Zeile ermitteln

Hans Haesler
  
Beiträge gesamt: 5826

11. Apr 2005, 22:20
Beitrag # 4 von 4
Beitrag ID: #419468
Bewertung:
(704 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Orlandoo,

bitteschön. Dann habe ich ja richtig geraten ... Und ich hoffe, dass Dein Problem keines mehr ist.

Hier noch eine mögliche Form des erwähnten Tests, welcher feststellt, ob eine Textbox ausgewählt
ist. Damit kann man eine präzisere Fehlermeldung anzeigen, als wenn das Scripting System
das Aufmucken von XPress interpretieren muss, falls die Auswahl des Anwenders nicht dem
nachfolgenden Hauptcode entspricht. Mit 'error number -128' wird die Ausführung abgebrochen.
Dieser Code entspricht dem Klick auf "Abbruch".
---
tell application "QuarkXPress 6.5"
   -- Dieser Test prüft, ob ein Projekt offen ist. Wenn nicht, wird nach dem Klick auf "OK" abgebrochen
   if not (exists document 1) then
      display dialog "Bitte ein Projekt öffnen." buttons "OK" default button 1 with icon 2
      error number -128
   end if
   tell document 1
      -- Nun wird getestet, ob eine Box ausgewählt ist
      if not (exists current box) then
         display dialog "Es ist keine Box ausgewählt." buttons "OK" default button 1 with icon 0
         error number -128
      end if
      -- Dann stellt man sicher, dass eine Textbox ausgewählt ist
      tell current box
         if box type is not text box type then
            display dialog "Bitte eine einzelne Textbox auswählen." buttons "OK" default button 1 with icon 0
            error number -128
         end if
      end tell
      tell selection
         try
            set insPoint to offset of (get object reference)
         on error
            display dialog ¬
               "Die ausgewählte Textbox ist leer." buttons "OK" default button 1 with icon 0
            error number -128
         end try
      end tell
      if (count of characters of selection) is 0 then
         tell current box
            tell story 1
               try
                  set basePos to baseline of character (insPoint + 1) as point units as real
               on error
                  try
                     set basePos to baseline of character insPoint as point units as real
                  on error
                     set basePos to baseline of character (insPoint - 1) as point units as real
                  end try
               end try
            end tell
         end tell
      else
         tell selection
            set basePos to baseline of character 1 as point units as real
         end tell
      end if
   end tell
end tell

---
In der zweiten Hälfte dieses Beispiels ist das erweiterte Script von gestern. Jetzt wird auch
versucht, unverständlichen Fehlermeldungen vorzubeugen. Aber man sollte noch weitergehen und
unterscheiden, ob sich die Auswahl in einem Layout oder auf einer Musterseite befindet.

Beispiele dafür gibt es hier: http://www.fachhefte.ch / Den Link "AppleScripts" anklicken, den
Ordner "mac_os_x_d" öffnen, die Inhaltsverzeichnis-Datei herunterladen, sich ein paar Scripts
vormerken und die entsprechenden Stuffit-Dateien auswählen.

Gruss, Hans


als Antwort auf: [#419465]
X