macfidelity

|

Apple | Mac OS X | AppleScript | Hints | Applications and more

Getting Started mit AppleScript (Lektion III – Working with dialogs & answers)

August 19th, 2008 at 11:06

Dies 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:

Tags: , , , , , ,

11 Responses to “Getting Started mit AppleScript (Lektion III – Working with dialogs & answers)”

  1. RS Says:

    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?

  2. fidel Says:

    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 =)

  3. RS Says:

    ich lade grade Interface Builder runter…
    es gibt da zwar ein manual zu, aber vllt. koenntest du trotzdem etwas dazu sagen?

  4. fidel Says:

    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.

  5. RS Says:

    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?

  6. fidel Says:

    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

  7. Getting Started mit AppleScript (Lektion V - Read from File) | macfidelity Says:

    [...] Lektion III – Working with dialogs and answers [...]

  8. Philipp Says:

    Wieso beginnst du die Benennung der Variablen alle mit “my”? Hat das mit globalen und lokalen Gültigkeitsbereichen zu tun?

  9. fidel Says:

    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

  10. Trin Says:

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

  11. fidel Says:

    @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

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>