GO BACK

AppleScript Studio教室 その2

「ボタンとテキストフィールドを使う」



■ボタンをクリックして動かす!

 では、さっそく何かサンプルを作ってみましょう。前回作った新規プロジェクトに部品を配置していくことにします。——まず、ツールパレットからボタンの部品を探して、デザインウィンドウに配置しましょう。ボタンは、ツールパレット上列の左から2番目のアイコン(Cocoa Viewsというもの)をクリックすると現れる部品類の中にあります。「Button」と表示されているのが、一般的なボタン(いわゆるプッシュボタン)の部品です。

ボタンを配置する


 これで、ボタンが作成されました。このボタンは、Cocoaの世界では「NSButton」と呼ばれるものです。Cocoaの部品は、みんな頭に「NS○○」というようにNSがつくのです。AppleScriptで使う場合には、単に「button」として扱いますが、一応NSButtonという呼び名が正式な部品名と思えばよいでしょう。

 このボタンは、マウスで中央をドラッグして移動したり、周辺部をドラッグして変形したりできます。これはボタンに限らずほとんどすべての部品で行えます。また、表示などの設定はInfoウィンドウを使って変更することができます。

 試しに、ボタンに表示されているテキストを変えてみましょう。——ボタンを選択し、Infoウィンドウの一番上にあるポップアップボタンから「Attributes」を選びます(通常はデフォルトで選ばれています)。そして、「Title」という部分にあるテキストを「押して!」と書き換えてリターンして下さい。ボタンの表示が変わりますよ。

ボタンのTitleを変更する


 このTitleというのは、「部品に表示されるテキストを示すアトリビュート(属性)」です。ボタンに限らず、さまざまな部品で用いられています。Cocoaの部品というのは、部品の表示や働きに関する設定が「アトリビュート」として用意されており、これを設定することで部品の状態を変更できるのですね。

 アトリビュートは、部品ごとに非常にたくさんのものが用意されていますから、一度にすべて覚えるのは大変でしょう。とりあえず、NSButtonでは以下のようなものだけ覚えておくとよいでしょう。


 まぁ、TypeとBehaviorの関係なんかはすぐにはわからないでしょうが、「そういうのがある」という程度に知っていれば今は十分でしょう。要するに「そうやってIntoウィンドウのAttributesにある項目を操作すれば、部品の状態が設定できるのだ」ということがわかればいいんですよ。


■イベントハンドラを設定する


 さて、それではボタンをクリックしたら何かを実行させてみましょう。——Cocoa開発の場合、こうした操作には「接続」と呼ばれる作業を行ないます。これはInterface Builderで、操作と機能の関係を結び付けていく作業です。が! AppleScript Studioでは、この「接続」は行いません。もっと単純なやり方ですみます。

 作成したNSButtonを選択し、Infoウィンドウの一番植えにあるポップアップボタンから「AppleScript」を選択して下さい。すると、「Name」「Event Handlers」「Script」といった項目のある表示に切り替わります。これが、AppleScriptに関する設定を行う部分です。これらは、それぞれ以下のような役割を果たします。
 AppleScript Studioでは、ボタンを操作したときの処理は「イベントハンドラ」というもので処理されます。イベントハンドラとは、文字通り「イベントにより呼び出されるハンドラ」のことです。——本ホームページの「AppleScript教室」で、ドラッグ&ドロップのopenハンドラなどについて説明しましたが、あれもイベントハンドラの一種です。何かの操作に応じて自動的に呼び出されるハンドラ。AppleScript Studioは、それを利用してスクリプトを割り付けるようになってるんですね。

 では、Event Handlersで「Action」という項目内にある「clicked」イベントをONにし、ScriptsにあるスクリプトファイルをONにしましょう。これで、「このボタンでclickedというイベントが発生したら、ONにしたスクリプトファイルにあるclickedイベントハンドラを呼び出す」という設定ができるのですね。

イベントハンドラを割り付ける

 これで、とりあえずInterface Builderでの作業は完了です。保存してからProject Builderに戻り、先ほどONにしたスクリプトファイルを見てみましょう。ちゃんと「on clicked theObject」といったハンドラが作成されているはずです。——では、ここに、以下のようにスクリプトを記述してみましょう。

  on clicked theObject
      display dialog "こんにちは!"
  end clicked


 わかりますね? 真ん中の「display dialog ・・」を追加しただけです。記述し終えたら、ビルド&実行してみましょう。そして現れた画面のボタンをクリックしてみて下さい。画面に「こんにちは!」と表示されます。ボタンをクリックすると、clickedイベントハンドラが呼び出されていることがよくわかりますね?

サンプルを実行する


■テキストフィールドを利用する


 では、続いてテキストを入力する部品を使ってみましょう。これは「NSTextField」と呼ばれるもので、NSButtonと同じツールパレットの「Cocoa Views」アイコンに用意されています。これをデザインウィンドウに配置すると、1行だけのテキストを入力できるフィールドが作成できます。

 このNSTextFieldにもいくつかのアトリビュートが用意されています。とりあえず以下のようなものを覚えておくとよいでしょう。
 とりあえず、このぐらいわかれば、いろいろ表示を操作できるでしょう。特に「Editable」と「Selectable」は、単にテキストを表示するだけのラベルとした使ったりします。

 では、作成したテキストフィールドを使ってみましょう。Cocoaの部品をAppleScriptから使う場合、重要なことが1つあります。それは「部品に名前を付ける」ということです。スクリプトの中から部品を指定するのに、名前がないと面倒でしょう? まぁ、番号でも指定できますが、きちんと部品を認識させるために、「スクリプトで使う部品には名前(Name)を設定しておく」と考えた方がいいでしょう。

 ここでは、以下の2つの部品について、AppleScriptの「Name」に名前を指定して下さい。
名前の設定
 
 忘れてはならないのが「ウィンドウの名前」です。ウィンドウは、Nibファイルウィンドウの「Instances」タブにある「Window」を選んで設定するとよいでしょう。後述しますが、AppleScriptでは部品を指定するのに「window ○○のtext field○○」という書き方をするので、部品のあるウィンドウも名前が必要なのです。

 では、名前の設定ができたら、保存し、Project Builderに戻ってclickedハンドラを以下のように修正しましょう。

    on clicked theObject
        set str1 to string value of text field "text1" of window "win1"
        display dialog "こんにちは、" & str1 & "さん!"
    end clicked

 これで、修正は完了です。プロジェクトをビルド&実行してみましょう。そして現れたウィンドウで、テキストフィールドに名前を書き、ボタンをクリックしてみます。すると、書き込んだ名前を使ってメッセージを表示します。

クリックすると名前を使って返事をする

 ここでは、clickeハンドラでNSTextFieldのテキストを取り出し、それを使って画面にテキストを表示しています。スクリプトを見てみると、以下のようにしてテキストを取り出していることがわかりますね。
set str1 to string value of text field "text1" of window "win1"
 「text field "text1"」というのが配置したNSTextField、「window "win1"」というのがウィンドウであることはわかるでしょう。このようにAppleScript Studioでは、配置した部品の組み込み構造に従って部品を記述します。このあたりは、Finderでファイルやフォルダを指定するのと同じ感覚だと思えばわかりやすいでしょう。従って、スクリプトを作成する際には「どの部品がどのように組み込まれているか」をよく把握しておく必要があります。

 テキストフィールドに書かれているテキストは「string value」というもので得ることができます。これは、値を取り出すだけでなく、「set string value of text field ○○ to "Hello"」というようにして値を変更することもできます。

 このstring valueというものは、テキストフィールドに限らず、Cocoaの部品に共通して用意されているものです。こうした「Cocoa部品共通の、部品の内容に関する機能」というのは他にもいろいろあって、それらを利用して、部品の値を取り出したり変更したりできるようになっているのですね。

 ということで、今回はボタンとテキストフィールドを使い、「クリックしたら何かを行なう」「部品の値を取り出す」といったことをやってみました。まずは、これらの点についてよく整理して、自分で使えるようになりましょう。

 

GO NEXT


GO HOME