AppleScript-Befehl für "Alles rechnen"

Guten Tag Allerseits,

ich lasse auf Knopfdruck mit einem AppleScript
in Schülerarbeitsbögen die Lösung
in die Textkomponente hineinrechnen.

Sehr häufig muss ich aber händisch
mit dem Befehl "Alles rechnen" nachhelfen,
damit auch wirklich alle Lösungen hineingerechnet werden
und nicht nur einige.

Ich würde gern mein Skript mit dem Befehl für "Alles rechnen"
abschließen,
damit ich mich nicht händisch darum zu kümmern brauche.

Im AppleScript-Funktionsverzeichnis habe ich nichts finden können,
was mir weiter geholfen hat.
Mit GUI-Scripting geht es - aber nicht innerhalb eines RT-internen
Skripts,
wie Detlef Schulz schon 'mal in einem anderen Zusammenhang bestätigt
hat.

Habe ich etwas übersehen, oder geht es wirklich nur über den Umweg,
von einem RT-internen AppleScript aus ein externes AppleScript zu
starten,
das dann mit GUI-Scripting für den nötigen Tastendruck sorgt?

Gruß
Lutz

Re: AppleScript-Befehl für "Alles rechnen"

#8516 On 25 März, 2009 22:07 djschulz said,

Hallo,

im Funktionsverzeichnis finde ich die Eigenschaft "autoamtic recalculation" die jede Komponente besitzt.
Damit kann man zumindest die automatische Neuberechnung in einer Komponente abschalten. Beim einschalten wird dann sofort alles in dieser Komponente wieder berechnet.

Erwartet wird ein boolescher Wert, also true oder false:

tell application "RagTime 6.5"
tell document 1
tell table "Rechenblatt 1"
set automatic recalculation to false
end tell
end tell
end tell

Seltsamerweise muss ich jedoch true und false genau andersherum setzen als ich erwartet habe, aber es funktioniert.

Gruß,
Detlef

Re: AppleScript-Befehl für "Alles rechnen"

#8517 On 27 März, 2009 21:57 djschulz said,

Hallo,

mir ist heute abend noch eine andere Lösung eingefallen als ich mir so das Funktionsverzeichnis ansah.
Ein Knopf kann ja in RagTime bekannterweise jeden Menübefehl ausführen. Man muss den Namen des Menüeintrags nur im Knopf eingeben.

Ein AppleScript in RagTime kann nun einen Knopf mit dem einfachen Befehl
execute button "Knopf 1"
drücken und der Menübefehl der in diesem Knopf hinterlegt ist wird ausgeführt.

Der Clou ist:
1. Es reicht wenn der Knopf im Inventar liegt, also nirgendwo sichtbar ist.
2. Man kann den Menübefehl, den dieser Knopf ausführen soll, ebenfalls im Skript angeben. Damit reicht ein einziger Knopf für alle Menüs.
3. Den Knopf kann man auch gleich per Skript erzeugen, falls er noch nicht existiert.
4. Man braucht kein GUI-Scripting mehr welches von außerhalb RagTimes einen Menübefehl per Skript aufruft.

Hier ein Beispiel mit "Alles rechnen".
Vor der Ausführung die automatische Neuberechnung in den Dokumenteinstellungen ausschalten und in einem Text oder Rechenblatt eine Formel angeben und die Werte verändern, so dass das Ergebnis nicht mehr stimmt. Nach Ausführung des folgenden Skripts wird dann neu berechnet.

tell application "RagTime 6.5"
tell document 1
if exists button "Knopf 1" then -- Wenn Knopf bereits existiert
-- Knopfbefehl auf einen Menünamen setzen:
set command name of button "Knopf 1" to "Alles rechnen"
--Knopfbefehl ausführen:
execute button "Knopf 1"
else -- Wenn Knopf noch nicht existert einen mit dem Menübefehl anlegen und ausführen
set calcButton to make new button at end with properties {name:"Knopf 1", command name:"Alles rechnen"}
execute calcButton
end if
end tell
end tell

Gruß,
Detlef

Re: AppleScript-Befehl für "Alles rechnen"

#8523 On 29 März, 2009 19:34 Lutz-Dieter Bornemann said,

Hallo Detlef (noch einmal),

ich habe mit Deinem Skript noch ein wenig herumprobiert
und muss sagen, dass Deine Idee obergenial ist.

Man kann damit über einen einzigen Knopf im Inventar
sogar in einem Skript verschiedene Befehle ansprechen,
und es funktioniert.

Es ist damit tastsächlich ein weitgehender Ersatz
für GUI-Scripting, soweit es das Geschehen innerhalb von RT betrifft.

Auch der Befehl "Alles rechnen" funktioniert meistens.
Ich habe dies u.a. mit der in einer Textkomponente
mitfließenden Formel "jetzt" ausprobiert.
Jedes Mal, wenn ich das Script mit dem Befehl "Alles rechnen"
habe ablaufen lassen wurde die Anzeige
(im Sekunden- und ev. Minutenbereich) aktualisiert.

Warum nun bei mir in einer erheblichen Zahl von Ausnahmefällen
erst ein Klick auf den entsprechenden im Layout installierten Knopf
oder ein das Betätigen des entsprechenden Tastaturkürzels
oder durch die Auswahl des Menübefehls mit der Maus
das bewirkt, was im Regelfall Dein Skript produziert,
ist mir ein Rätsel.

Ich vermute, dass bei "execute button …"
kein System Event an RT gesendet wird,
der dann noch etwas anderes bewirkt,
als die Neuberechnung "anzuschieben".
Es würde mich jedenfalls nicht wundern,
wenn über System Events ebenfalls ein Erfolg erzielt wird.

Gruß
Lutz

Re: AppleScript-Befehl für "Alles rechnen"

#8524 On 29 März, 2009 20:14 Lutz-Dieter Bornemann said,

Hallo Detlef (zum 2. Mal noch einaml),

mit Hilfe des Beispiels in Deinem Buch auf Seite 735
habe ich endlich kapiert, "wie das mit den Untermenüs bei den System
Events geht".

activate application "RagTime 6.5"
tell application "System Events"
tell process "RagTime"
-- Menü Extras/Rechnen/Alles rechnen aufrufen
click menu item "Alles rechnen" of menu 1 of menu item "Rechnen" of
menu 1 of menu bar item "Extras" of menu bar 1
end tell
end tell

Was ich zunächst nicht "gesehen" hatte,
war, dass jeder "menu item ..." mit "of menu 1" ergänzt werden muss.

Also mit "falscher" Formatierung:

click
menu item "Alles rechnen" of menu 1 -- hier die unterste Ebene
of menu item "Rechnen" of menu 1 -- darüber liegende Ebene
of menu bar item "Extras" of menu bar 1 -- oberste Ebene

Über den Weg der "System Events" werden jetzt auch
die in einer Textkomponente mitfließenden Formeln
"gerechnet", die bisher keine Reaktion gezeigt haben.
Das waren nie alle in in der Textkomponente eines Dokuments.

Meinst Du nicht auch, dass da irgend etwas in RT "bugy" ist?

Gruß
Lutz

Re: AppleScript-Befehl für "Alles rechnen"

#8525 On 29 März, 2009 20:37 djschulz said,

Hallo Lutz,

-- Meinst Du nicht auch, dass da irgend etwas in RT "bugy" ist?

ja, ganz Deiner Meinung. Ich glaube das die Skriptbarkeit von Ragtime mal eine Generalüberholung gebrauchen könnte, jetzt nachdem man unter Windows auch VisualBasic verwenden kann. Mich stört zum Beispiel das ich ein bereits bestehendes Objekt wie einen Knopf oder auch andere Objekte nicht nachträglich in eine Variable packen kann. Geht meist nur, wenn man das Objekt auch per Skript erstellt. Die Variable enthält dann den Wert "empty".

Auch wäre es super wenn die property "properties" für alle Klassen implementiert würde. Damit lässt sich oft schneller als über das Funktionsverzeichnis mal eben was über die Eigenschaften von Objekten erfahren.

Was jedoch toll ist: Das das Aufzeichnen funktioniert bei mir wieder. Ich weiß nicht seit wann das wieder klappt. Aber Klasse, gerade für Anfänger!

Gruß,
Detlef

Re: AppleScript-Befehl für "Alles rechnen"

#8526 On 29 März, 2009 20:54 Jacques Villars said,

Le 29 mars 09 à 21:18, Lutz-Dieter Bornemann a écrit :

> Hallo Detlef (zum 2. Mal noch einaml),
>
> mit Hilfe des Beispiels in Deinem Buch auf Seite 735
>

Hallo Lutz,
von welchem Buch sprichst Du ? besitze Professionnell arbeiten mit
RagTime 6, mit nur 600 Seiten und nur zwei davon über AppleScript…
Grüsse
jacques

Re: AppleScript-Befehl für "Alles rechnen"

#8527 On 29 März, 2009 21:04 Lutz-Dieter Bornemann said,

Am 29.03.2009 um 21:58 schrieb Jacques Villars:

>
> Le 29 mars 09 à 21:18, Lutz-Dieter Bornemann a écrit :
>
>> Hallo Detlef (zum 2. Mal noch einaml),
>>
>> mit Hilfe des Beispiels in Deinem Buch auf Seite 735
>>
>
> Hallo Lutz,
> von welchem Buch sprichst Du ? besitze Professionnell arbeiten mit
> RagTime 6, mit nur 600 Seiten und nur zwei davon über AppleScript…

Hallo Jacques,

ich spreche von

"AppleScript - Der automatische Mac"
von Detlef Schulz
SmartBooks
ISBN 978-3-908497-78-3
EUR (D) 39,95

www.djschulz.de oder www.skripteditor.de

Gruß
Lutz

Re: AppleScript-Befehl für "Alles rechnen"

#8528 On 29 März, 2009 21:09 Jacques Villars said,

Danke vielmal, kennte das nicht !
Grüsse
jacques
Le 29 mars 09 à 22:10, Lutz-Dieter Bornemann a écrit :

>
> Am 29.03.2009 um 21:58 schrieb Jacques Villars:
>
>>
>> Le 29 mars 09 à 21:18, Lutz-Dieter Bornemann a écrit :
>>
>>> Hallo Detlef (zum 2. Mal noch einaml),
>>>
>>> mit Hilfe des Beispiels in Deinem Buch auf Seite 735
>>>
>>
>> Hallo Lutz,
>> von welchem Buch sprichst Du ? besitze Professionnell arbeiten mit
>> RagTime 6, mit nur 600 Seiten und nur zwei davon über AppleScript…
>
> Hallo Jacques,
>
> ich spreche von
>
> "AppleScript - Der automatische Mac"
> von Detlef Schulz
> SmartBooks
> ISBN 978-3-908497-78-3
> EUR (D) 39,95
>
> www.djschulz.de oder www.skripteditor.de
>
>
> Gruß
> Lutz
>
>
>

Re: AppleScript-Befehl für "Alles rechnen"

#8532 On 30 März, 2009 10:14 Lutz-Dieter Bornemann said,

Guten Tag Allerseits,

hier nun das vollständige Skript:

tell application "RagTime 6.5"
activate
-- Prüfung, ob die Lösungen hineingerechnet sind, falls ja, wird der
umgekehrte Zustand hergestellt
if value of cell "C1" of table "Lösungen" of document 1 is 1 then
-- Wechsel der Farbe für die Lösungen auf einen Rotton
set color of fill style sheet "Lö" of document 1 to {61166, 0, 0}
-- Umschalten auf nicht druckbar, damit die Lösungen, die stehen
bleiben, im Ausdruck nicht erscheinen
set nonprinting of fill style sheet "Lö" of document 1 to true
-- Umschalten des Knopftitels (Beim nächsten Klick sollen die
Lösungen ja wieder aktiviert werden.)
set title text of button "Lösung drucken ein/aus" of document 1 to
"Lösung aktivieren"
-- Signal für die Formeln des berechneten Textes in der
Textkomponente, entweder gar nichts oder ein nicht druckbaren Hinweis
zu zeigen.
set cell "C1" of table "GB/Aufgaben + Lösung" of document 1 to ""
else
-- In der gegenteiligen Prozedur habe ich einen Blauton gewählt
set color of fill style sheet "Lö" of document 1 to {0, 13107, 26214}
set nonprinting of fill style sheet "Lö" of document 1 to false
set title text of button "Lösung drucken ein/aus" of document 1 to
"Lösung deaktivieren"
set cell "C1" of table "GB/Aufgaben + Lösung" of document 1 to "1"
end if
end tell

-- Da aber manche Formeln erst reagieren, wenn man einen System Event
an RT sendet, ...
tell application "Finder"
activate
open application file "Alles rechnen.app" of folder "AppleScripte" of
folder "Desktop" of folder "ldborn" of folder "Users" of startup disk
end tell

-- Skript "Alles rechnen"
activate application "RagTime 6.5"
tell application "System Events"
tell process "RagTime"
-- Menü Extras/Rechnen/Alles rechnen aufrufen
click menu item "Alles rechnen" of menu 1 of menu item "Rechnen" of
menu 1 of menu bar item "Extras" of menu bar 1
end tell
end tell

Am Schluss kann man vielleicht eleganter und schneller verfahren.

Gruß
Lutz