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

Am 25.03.2009 um 22:11 schrieb djschulz:

> 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.
>

Hallo Detlef,

ich habe wieder etwas gelernt,
doch leider auch, dass Deine Lösung
bei mir in Textkomponenten nicht,
wohl aber in Rechenblättern funktioniert.
Man kann das auch händisch ausprobieren,
indem man in der jeweiligen Informationstafel
unter "Allgemein" bei "Nur auf Verlangen neu berechnen"
den Haken setzt bzw. wieder löscht.
Auch das funktioniert bei mir mit Rechenblättern,
aber nicht mit Textkomponenten.

Beim Herumprobieren habe ich jedoch herausgefunden,
dass das An- und Abschalten von "Iteration"
bei "Berechnung" unter "Dokumenteneinstellungen ..."
wie "Alles rechnen" wirkt, d.h., die mitfliessenden Formeln,
deren Neuberechnung bisher "geklemmt" hat,
werden "gerechnet".
Leider scheint sich das nicht per AppleScript setzen zu lassen - oder
doch?

Denselben Effekt erziele ich,
wenn ich im Formeleditor die Einfügemarke
hinter das letzte Zeichen der Formel stelle,
einen Leerschritt eingebe und die Entertaste drücke.

Ich habe den Eindruck,
hier klemmt nicht die Neuberechnung selbst,
sondern jener Programmteil in RT,
der die Formel im Editor in Maschinensprache umsetzt.

Gruß
Lutz

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

#8518 On 28 März, 2009 11:04 Lutz-Dieter Bornemann said,

Hallo Detlef,

vielen Dank für Deine Mühe,
aber bei mir ist offensichtlich der Wurm drin.

Dein Skript funktioniert insoweit,
als dass der Knopf erzeugt wird und im Inventar erscheint.
Die Zeile:
execute button "Knopf 1" (Ich habe "Menübefehle" daraus gemacht)
bzw. die Zeile
"execute calcButton"
bewirkt jedoch nichts.

Wenn ich jetzt den Knopf "Knopf 1" (bei mir Knopf "Menübefehle")
per drag and drop im Layout plaziere,
erscheint er mit dem Titel "Knopf",
obwohl die Komponente im Knopfinformationsfenster
den Namen "Knopf 1" (bzw. bei mir "Menübefehle") angibt.

Klicke ich nun mit der Maus auf den Knopf,
wird alles gerechnet und auch die Formeln,
die bisher nicht gerechnet haben, rechnen nun
und zeigen den gewünschten Inhalt an.

Ich habe mir nun überlegt, wie bei der Lösung von außerhalb
die Skriptzeilen bezogen auf die System Events lauten müssten,
und habe analog zu Deinem Vorschlag für die PDF-Erzeugung
mir folgendes überlegt:
tell application "System Events"
tell process "RagTime"
-- Menü Extras/Alles rechnen aufrufen
click menu item "Alles rechnen" of menu 1 of menu bar item "Extras"
of menu bar 1
end tell
end tell

Leider bekomme ich die Fehlermeldung
"„System Events“ hat einen Fehler erhalten:
„menu item "Alles rechnen" of menu 1 of menu bar item "Extras" of menu
bar 1 of process "RagTime" kann nicht gelesen werden.

Das Problem scheint bei mir und zumindest für mich sehr hartnäckig zu
sein.

Gruß
Lutz

Am 27.03.2009 um 22:01 schrieb djschulz:

> 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"

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

Am 29.03.2009 um 21:41 schrieb djschulz:

> 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!
>

Hallo Detlef,

Deinem letzten Satz kann ich nur zustimmen,
denn das fertige AppleScript ist meist gut und einfach lesbar,
weil es sehr sprechnah ist.

Aber die Denke ist gerade bei der Referenzierung von Objekten
eben nicht entsprechend der Sprachlogik.
Deshalb bin ja zunächst gestolpert.
Kein Mensch würde so sprechen,
sondern so, wie ich es bei meinen Fehlversuchen im Prinzip getan habe.
Konsequenter hätte ich allerdings formulieren müssen:
"click menu item "Alles rechnen" of menu item "Rechnen" of menu 1 of
menu bar item "Extras" of menu bar 1"
Auf den Zusatz "of menu 1" direkt nach "Alles rechnen" kommt niemand,
der entsprechend der Sprachlogik konstruiert.
Und das geht vielen Gelegenheitsscriptern wie mir genauso.

Ich werde demnächst noch versuchen,
die System-Events-Variante bei mir zu "implementieren"
(Hoffentlich gibt 's nicht wieder Probleme!!)
und das Ergebnis dann mailen,
weil ich glaube, dass es vielleicht doch einige stille Mitleser dieser
Liste interessiert.

Soweit erst einmal …
Gruß
Lutz