HyperCard tribute
ポップアップメニューの追加・削除
ポップアップメニューの内容を追加する方法です。ポップアップの内容はボタンの設定画面の内容ボタンからしかできないようですが、実はスクリプト上からでも可能です。その理由は、ポップアップメニューのデータをテキストとしてボタンが持っているからです。 ポップアップというのはHyperCard2.2から追加された機能です。それ以前のHyperCardでポップアップを作るには、クリックして選択されたメニューを表示するためのボタン(フィールドでも可能)と、ポップアップメニューを表示するフィールドが必要でした。しかし、HyperCard2.2ではボタンだけでできるようになりました。それは、ボタンもフィールドと同じコンテナとして扱われるようになったからです。 コンテナとはデータを納める場所の事です。コンテナには以下の種類があります。 1. フィールド 2. ボタン 3. メニュー 4. 変数(ローカル変数、グローバル変数、it) 5. メッセージボックス すなわち、フィールドはコンテナの内容を表示する場所を持っているために、コンテナの内容を見ることができるのです。そして、ボタンはその場所をもっていないために通常は見ることができない。しか、しデータを持つことは可能なのです。 ボタンのコンテナへのへのアプローチの方法はフィールドへのそれと同じです。 それではいくつかの実験をしてみようと思います。普通にボタンを作成し名前を「実験」にしてみて下さい。 以下のスクリプトをメッセージボックスから打ち込んでみて下さい。 メッセージボックスには何も表示されないはずです。コンテナには何も入ってないのですから当然です。 これで "コンテナの実験です" というデータがボタン「実験」のコンテナに代入されました。ボタン「実験」の設定画面を出して、内容ボタンをクリックしてみて下さい。コンテナの内容を見ることができます。 次はポップアップメニューへの追加をしてみます。 追加するメニューにもあるように、改行を忘れないようにしなければなりません。現在のカーソルは最後の行である "コンテナの実験です" の後ろにあります。そのため追加するためには先にreturnコードを入れ次の行にカーソルを移してからにしなければならないのです。 追加ですから after に変えるのも忘れてはなりません。intoにすれば上書き代入されてしまいますし、beforeにすれば前に挿入されてしまいます。 次は指定した行への代入です。これも他と同じく、別に変わったことはしていません。フィールドなどで用いた方法がそのまま使うことができます。 ボタン「実験」のコンテナ2行目に代入します。
それでは、optionキーを押しながらクリックしたときに、askのダイアログで追加するポップアップメニューを聞き追加するスクリプトを作ってみます。 ポップアップ形式のボタン「選択」を作り、以下のスクリプトを打ち込んで下さい。
3行目では、オプションキーが押されているかどうかを調べます。optionキーがdownであればthen節の中の処理が実行されます。4行目で、askを用いて追加するポップアップメニューを聞き、それを6行目で追加します。 スクリプトを追加して、ポップアップメニューを削除するようにしてみます。 追加には option キーを使いましたので、削除には shift キーを使ってみます。shiftキーを押しながらクリックしたら、選択していた行を削除します。 8行目以降が追加されたスクリプトです。
ボタン「選択」で選択されている行が何行目であるかを調べます。 selectedLineで取り出されるデータは、「line 4 of card button 1」という様な形式です。このデータからは「カードボタン番号1の4行目が選択されている」ということがわかります。すなわち、必要なのは2つ目のwordの位置のデータです。
put the selectedLine of cd btn "選択" into a put word 2 of a into number 上のように分けて書けばわかりやすくなることと思います。すなわち、このように1文で連ねて書くことも可能であるという事です。 delete命令を使えばデータを完全に消去することができます。 ここでemptyを代入したとすると、1行空白の行ができてしまいます。emptyは空っぽなのですが、コンテナの2行目には値が入る余地が残されています。この余地を消し去るためにdelete命令を用いるのです。
アドレス帳などの人名を選択する時に、ポップアップメニューを用いれば大変わかりやすいユーザーインターフェースとなります。広いスペースを取ることができる場合はリスト形式のフィールドを用い、広いスペースを取ることができない場合はポップアップを用いるという風に分ければよいでしょう。 |