Getting Started mit AppleScript (Lektion III – Working with dialogs & answers)
August 19th, 2008 at 11:06Dies ist der dritte Beitrag der Serie “Getting started mit AppleScript” und befasst sich thematisch erneut mit “display dialog”.
In den vorherigen Beiträgen wurden Dialoge erzeugt und mit Grundeigenschaften wie Fenster-Titel (title), Anzeige-Dauer (giving up after X) sowie Knöpfen versehen.
Zielsetzung Lektion III:
Aufzeigen zusätzlicher Möglichkeiten im Rahmen der Verwendung von Display Dialog. Aufzeigen der Limitierungen bei reiner Verwendung vom Script Editor.
Praxis:
Fangen wir mit einem leeren Dokument an und füllen erstmal einige Grundkommentare ein, damit klar wird wer hier was macht.
Erzeigen wir nun mit den Mitteln aus Lektion II einen Dialog mit 2 Knöpfen
Nun wollen wir natürlich die Antwort auch verarbeiten, daher müssen wir prüfen was der User geklickt hat. Dazu füge ich in diesem Fall einfach 2 IF-Prüfungen ein, die jeweils nur prüfen ob es sich bei der Antwort um ein JA oder NEIN gehandelt hat.
Dies könnte man auch mit einer geschatelten if-else Konstruktion machen, ich ziehe hier 2 einzelne Prüfungen vor um das Beispiel klein und nachvollziehbar zu machen. Lektion II arbeitete bereits mit geschachtelten Prüfungen.
Zum aktuellen Zeitpunkt alles sehr simpel, jedoch auch sehr eingeschränkt, da der User nut vorgefertigte Antworten geben kann.
Stellen wir uns vor wir wollen diesen Dialog mitbrauchen um das Alter des Users zu erfragen. Wollen wir nun 100 Buttons in den Dialog einfügen und diese wiederrum prüfen ?
Nein, würde auch mit den Dimensionen eines Display Dialog Fensters nicht wirklich spassig sein.
Wir bauen unseren Display Dialog also um, so dass der User zwar weiterhin 2 Knöpfe hat, nämlich um den Dialog abzuarbeiten oder abzubrechen. Ich habe den Code zum vorherigen Schritt wieder vereinfacht um alles klein zu halten
Der folgenden Code stellt und also nur die Frage ohne Eingabemöglichkeit, abgesehen von unseren 2 Grund-Buttons:
Nun benötigen wir ein zusätzliches Element in unserem Dialog-Fenster um dem User die Möglichkeit zu geben uns zu antworten. Dies ist relativ einfach aber auch gleichzeitig eingeschränkt möglich. Zu den Einschränkungen später mehr.
Wir modifizieren unseren Display Dialog mit dem Zusatz “default answer”. Um den Dialog gleichzeitig auch noch etwas hübscher zu gestalten zeigen wir auch noch ein Icon an. Die Verwendung von “default answer” fügt dem Dialog automatisch ein Textfeld hinzu welches wir mit der ebenso neuen Variable “myDefaultAnswer” befüllen um einen VorgabeWert zu haben.
Der Code sollte in etwa so aussehen:
So Zeit das ganze mal in Action zu sehen -> daher im Script Editor “Compile” und dann “Run” betätigen. Das Ergebnis sollte wie folgt aussehen:
Nun gut … sieht doch schon besser aus wie bisher
Im folgenden werden wir die Antwort des Benutzers verarbeiten. Dafür müssen wir im Kern 2 Sachen prüfen. Einerseits welchen Knopf der User gedrückt hat und als Unterfall die Prüfung des Wertes im Textfeld.
Eine einfache Variante würde so aussehen. Bitte beachten dass die unteren Zeilen nur zum ersten Test da sind.
Nun könnte man das ganze mit Hilfe einer verschatelten IF-Konstruktion wieder in einen logischen Ablauf zwängen.
Ablauflogik:
Drückt der Anwender “Abbrechen” zeigen wir einen Fehler-Dialog. Entscheidet sich der User jedoch den Dialog mit “Ok” zu beantworten, geben wir seine Antwort aus.
Eh voila, wir haben einen Dialog, der uns User-Eingaben ermöglicht und das ganze auch noch passend mit Icons untermalt. Die verwendeten Icons sind die Default Icons im Script Editor (icon 0 / icon 1 …).
Ich denke die Grundmöglichkeiten sind ausreichend gezeigt, daher werde ich abschließend auf die Einschränkungen eingehen.
Einschränkungen:
Script Editor ist relativ gut zum testen kleiner Scripte jedoch kommen wir schon hier so langsam an die Grenzen der reinen Script Editor Verwendung. Wir können die Dialog-Fenster nicht bis ins letzte Detail unseren Vorstellungen anpassen.
Um z.b. ein wirklich inidivduell gestaltetes Fenster zu verwenden müssen wir uns dieses im Interface Builder basteln und dann darauf via AppleScript zurückgreifen.
Auch die Verwendung von Icons empfand ich bei meinen Test sehr eingeschränkt, weshalb ich selber auch relativ fix zu Xcode gewechselt bin, einfach um mehr Möglichkeiten zu haben.
Um diese Einschräkungen mal deutlich zu machen hier ein Screenshot eines Fensters welches ich mit dem Interface Builder erstellt habe. Es zeigt sehr gut dass die Gestaltung des Fensters und die Anzahl an grafischen Elementen so sehr vielseitig ist und bei weitem flexibler wie nur mit dem Script Editor an sich.
Der Screenshot zeigt das Interface eines kleinen Spieles (YaDoWa) welches ich aktuell zum AppleScript lernen bastel. Mehr dazu bald hier in diesem Blog.
Über Interface Builder:
Der Interface Builder ist Teil der XCode Tools welche Apple frei anbietet. Allgemein ist zu sagen dass man damit relativ einfach User-Interfaces basteln kann welche man dann z.b. via AppleScript ansprechen kann. Die XCode Tools sind auf der Mac OS X Installations-CD enthalten oder direkt bei Apple downloadbar, jedoch nur wenn man sich einen kostenlosen ADC-Account erstellt. Die Ergebnisse im Interface Builder werden üblicherweise als .NIB gespeichert.
Abschließend:
Ich hoffe dieser dritte Teil hat den Umgang mit Dialogen weiter erleichtert. Wer Fragen oder Anregungen hat ist im Kommentar-Bereich herzlich willkommen.
Ich habe mich entschlossen ab Teil II keinen AppleScript Code direkt in Text-Form einzubinden, einfach um nicht alles vorzukauen und auch etwas Notwendigkeit für Eigeninitiative zu forcieren. Selber tippen ist immer besser wie reines Copy & Paste. Denke die Screenshots zeigen alles notwendige.
Die nächste Folge wird sich dann mit dem Umgang mit Strings beschäftigen, damit wir mal von reinen Dialogen wegkommen.
Bis dahin weiterhin Viel Spass beim Scripten
Links:
- Wikipedia über Interface Builder (englisch & umfangreicher)
- Wikipedia über Interface Builder (deutsch)
- Apple XCode Tools
- Apple Interface Builder
- Apple NIB Doc
Tags: applescript, default answer, getting started, howto, interface builder, tutorial, xcode










August 19th, 2008 at 15:35
ich hab jetzt noch mehr verstanden… danke
aber eine sache: warum nutzt man ueberhaupt apple-script wenn interface viel besser ist?
lohnt sich apple script ueberhaupt?
August 19th, 2008 at 16:15
moment, ich denke du verwechselst hier was.
das eine ist Script Editor, ein Programm um kleine apple-Script Code-Stücke zu erstellen etc
Das andere ist Interface Builder, welcher nur für die Erstellung von umfangreicheren Oberflächen genützt wird ….. die man dann ggf. wieder via AppleScript anspricht.
Das ebenso erwähnte XCode wäre ein Ersatz für Script-Editor, welches aber viel umfangreicher / komplexer ist, letzlich ein typisches IDE für Entwickler.
Da ich mich ungerne einschränken lasse, verwende ich selbst XCode für meine Projekte, für die How-To’s hier jedoch Script-Editor da es übersichtlicher ist.
Kleine Porgramme sind in AppleScript gerade für nicht Beurfliche Entwickler relativ fix umgesetzt und nebenbei kann es sogar Spass machen.
Für meinen Teil lohnt sich AppleScript auf jeden Fall, letzlich musst du das für dich aber selber beantworten =)
August 19th, 2008 at 18:46
ich lade grade Interface Builder runter…
es gibt da zwar ein manual zu, aber vllt. koenntest du trotzdem etwas dazu sagen?
August 19th, 2008 at 20:28
Ne, aktuell will ich erstmal die AppleScript Reihe weitermachen. Interface Builder ist aber auch selbsterklärend.
Window erstellen -> Element reinziehen -> Namen für AppleScript vergeben -> Applescript File hinterlegen und fertig
d.h. ab diesem Moment kannst du es via Script ansprechen.
Vielleicht finde ich nach Abschluss der eigentlichen appleScript Serie Zeit mal näher auf den Interface Builder einzugehen, aber rechne bitte nicht zu früh damit.
August 20th, 2008 at 18:20
zu den icons
wie kann ich ein neu erstelltes icon in mein script einbinden
also z b ein dialog mit neuem icon; wie geht das?
August 20th, 2008 at 18:34
da kommt wieder genau eines der Probleme mit dem Script Editor zum tragen:
In kurz es ist mà ¶glich, aber als ich das vor Monaten mal versuchte war das irgendwie buggy. Ein weiterer Grund warum ich zu XCode gewechselt bin =)
Eine gute Beschreibung wie du vorgehen solltest findest du in diesem Beitrag:
http://forums.macosxhints.com/archive/index.php/t-26617.html
Hoffe ich konnte helfen
August 30th, 2008 at 14:47
[...] Lektion III – Working with dialogs and answers [...]
August 30th, 2009 at 15:58
Wieso beginnst du die Benennung der Variablen alle mit “my”? Hat das mit globalen und lokalen Gültigkeitsbereichen zu tun?
August 30th, 2009 at 20:20
Hi Philipp,
also bei normalen Variablen ist das keine Pflicht – sondern eher mein Stil.
Letzlich solltest du nur keine Sonderzeichen verwenden und auch keine typischen AppleScript Befehle da das gern zu Fehlern führt.
Bzgl Gültigkeitbereiche findest du hier:
>> http://www.fischer-bayern.de/applescript/html/variable_2.html
eine hilfreiche Beschreibung.
Ich hoffe das beantwortet deine Frage – wenn nicht einfach nochmal nachhaken.
Gruss
fidel
January 8th, 2010 at 23:10
die Sachen sind echt super durchdacht und gemacht vielen Dank
aber immer wenn ich ein “end if” (so wie oben angezeigt ) oder eine ähnliche Endung eingebe sagt mir das prog das es das nicht erwartet hat gibt’s da irgendeine Lösung ??
January 8th, 2010 at 23:17
@trin:
das bedeutet eigentlich indirekt dass du einen Fehler beim nachbauen gemachst hast.
Prüfe wieder exakt den Code – im Kern kannst du auch mal alles innerhalb dem if-Konstrukt auskommentieren.
Wahlweise also Code prüfen – oder Ausschlussprinzip oder Code hier posten (z.b pastie.org verwneden und querverlinken)
Gruß und viel Erfolg
fidel