10: テキスト・フィールド
この章の概略
- スタックがリサイズされた時に、オブジェクトのサイズやポジションを変えるジオメトリー・マネージャーで、フィールド、ボタンが1つづつと、それぞれ2つづつの場合の設定について学びます。
-
フィールドからキャラクター、ワード、ライン等のデータを得て、他のフィードに移し替えたり、フォントやカラーを変化させたりします。
-
テキストがロックされているフィールドを、マウス・クリックでキャラクター、ワード、ライン等の情報を得ます。
-
英語のテキストを保存します。
-
ジオメトリー・マネージャーを使わない、スクリプトによるリサイズ・スタック。
ジオメトリー:フィールド1つ、ボタン1つ。
始めにスタックとフィールドのビジュアルな関連から入ります。スタックのサイズが変化した時に、フィールドも同時にそれに合わせて大きさが変わる、ジオメトリー・マネージャーの扱いです。ニュー・メイン・スタックをFileメニューから作ります。スタック・ネームは「textField」、タイトルは「Text Field」にします。ツール・パレットからテキスト・フィールドの「Scrolling Field」をカードにドラッグ&ドロップしてください。これは普通にテキストが打ち込めて、右側に縦のスクローリング・バー(vScrollbar)があるフィールドです。
put the vScrollbar of field 1
プロパティ「vScrollbar」が「true」です。「v」は「vertical(垂直)」の意味
set the vScrollBar of field 1 to false
プロパティ「vScrollbar」を「false」にすると、スクロールバーが消えます。
フィールドを下の図のようにカード上に広げます。左下にボタンを置くので、そのスペースも少し見てください。左下に「Push Button」を置きます。スタック「textField」のインスペクターを開いて、「Size」& Position」を開けます。フィールドやボタン等コントロールの「Size」& Position」とは違っていて、一番上のプロパティが「Resizable(リサイズできる)」になっています。デフォルトのスタック・サイズは「400 x 400」です。下の方にある「Min Width」と「Min Height」はどちらも「400」にしてください。ユーザーがスタック(ウインドウ)のサイズを変えられる最小の大きさです。つまりこのサイズ以下にはできません。
次に「フィールド1」をセレクトして、インスペクターの「Geometry」を開きます。これでユーザーがスタック右下をドラッグして、ウインドウ・サイズが変わった時に「フィールド1」も同時に大きさが変わるようにセットします。インスペクターのトップにある「Scale selected object セレクトしているオブジェクトのサイズを変える」が選ばれているのを確認します。その下にあるウインドウの図の中央「Selected object」から右サイドまで伸びている斜線をクリックすると、下の図のようにオレンジに変わります。同じように「Selected object」から下に伸びている斜線をクリックしてください。やはり下の図のようにオレンジに変わります。これでウインドウ・サイズに比例してフィールドのサイズも変わります。
図:フィールドのジオメトリー設定
ウインドウとフィールドに合わせて、ボタンの位置が動くようにしないといけません。ボタンをセレクトして、ボタンのインスペクターから「Geometry」を開きます。今度はサイズは変わらないで、ポジションだけが移動するようにするので、トップの「Position selected object」を選びます。ウインドウの図の中にある「Selected object」から、下に伸びている斜線をクリックしてください。下の図のようにオレンジに変わります。オレンジ色のベタ帯は、いつも変わらないピクセル数のアキを示しています。
図:左下ボタンのジオメトリー設定
これでブラウズ・ツールに持ち替えたら、スタック右下を動かしてウインドウの大きさを変えてみましょう。どうでしょう。うまくリサイズしていますか。
ジオメトリー:フィールド2つ、ボタン2つ。
今度はフィールド2つと、ボタン2つでやってみます。いったんフィールドもボタンも「Geometry」を全て解除してください。オブジェクトをセレクトして、インスペクターの「Geometry」の最下部にある「Remove All」をクリックします。
スタックをもう少し横長にします。例では 680 x 480 のサイズにしました。スタック・インスペクターで「Min Width」も「Min Height」680, 480 にしてください。フィールド1の名前を「tLeft」にして、をスタックの横巾のほぼ半分弱くらいのサイズにして、縦もボタンの位置ががちょうど良いくらいに伸ばします。フィールド「tLeft」の下にあるボタンは「tLeft」と言う名前にします。カードの右側の空間に同じ大きさのフィールドとボタンを作ったら、フィールド名「tRight」、ボタン名「tRight」にします。
図:左のフィールドのジオメトリー設定
始めに左のフィールド「tLeft」をセレクトして、インスペクターの「Geometry」を開いたら、トップの「Scale selected object」を選びます。ウインドウの図の中央「Selected object」から右サイドまで伸びている斜線を2度クリックすると、1度目はオレンジ色のベタの帯、2度目にオレンジの波のような線に変わります。たぶんスプリングとかゴムのような伸び縮みするイメージで、インターフェイスが作られたかと思います。「Selected object」の下にある斜線は1度だけのクリックで、オレンジのベタにします。
図:左のボタンのジオメトリー設定
次に左下のボタン「tLeft」は、フィールドがひとつだけの場合と同じ設定で、トップの「Position selected object」を選んで、ウインドウの図にある、「Selected object」から下に伸びている斜線は1度だけクリックして図のようにオレンジのベタにします。
図:右のフィールドのジオメトリー設定
右のフィールドは、トップの「Scale selected object」を選んで、右の辺、下の辺はオレンジのベタ、左は「Left object」から「Field "tLeft"」を選びます。これによって左のフィールド「tLeft」伸び縮みによってフィールド「tRight」の左サイドの位置が変わります。
図:右のボタンのジオメトリー設定
もうひとつ残っている右下のボタン「tRight」は、トップの「Position selected object」を選んで、ウインドウの下ボトムに伸びる線はオレンジ・ベタ、右サイドに伸びる線はスプリング(波線)にします。これでスタックを保存(Save)します。スタックをリサイズして、2つのフィールドとボタンがうまく動かないに時は、全てのコントロールを「Remove All」で設定を外して、始めからやり直してください。
フィールドの英文を扱う
上で設定したテキスト・フィールドを使って、英文を少し触ってみます。日本文は英文がある程度扱えるくらいの、基礎的なフィールドの知識をつけてからにします。作った普通(プロパティがデフォルト)のフィールドに、「abcdefg』とタイプしてください。フィールドのインスペクターを見ると「Font フォント」「Size サイズ」が空白です。これはOSのシステム・フォントで、Mac OSでは「Lucinda Grande」、Windowsでは「Segoe UI」が設定されています。フォント・サイズは「11ポイント」です。
フィールドのサンプルで扱える英文をインターネットからコピーして使う事にします。「
http://kenjikojima.com/livecode/alice.html」を開いてください。不思議な国のアリスの第一章の一部があります。これをサンプル・テキストとして始めの「CHAPTER I」からパラグラフ3の終わり「a large rabbit[hole under the hedge.」までをコピーして、上で作ったフィールド「tLeft」にペーストします。
図:http://kenjikojima.com/livecode/alice.htmlからコピー
図:フィールド「tLeft」にペースト
ウェブ・ブラウザーからフィールドにペーストすると、コピーした元のページのタグ指定がそのまま生きて(LiveCodeフィールドのhtmlText設定)、フォントのサイズがフィールド・プロパティの設定ではない大きさになります。それではタグ指定を外したプレインなテキストを、フィールド「tRight」に入れます。
get the text of field "tLeft"
put it into field "tRight"
フィールド「tLeft」をゲットして「it」に入れる。
「it」をフィールド「tRight」に入れなさい。
-- put field "tLeft" into field "tRight" としても同じ結果が得れます。
図:タグの設定を取ってフィールド「tRight」に入れる
フィールド「tRight」にあるテキストをは、HTMLのタグを取り除いてフィールド・プロパティのテキストにしたので、HTMLのパラグラフのアキだった「< P >」もなくなって、タグがあったその部分のアキの行が、フィールド「tRight」からもなくなってしまいました。アキの行をメッセージ・ボックスから追加しておきます。例えば始めの1行「CHAPTER I」の最後には見えない「return リターンのキャラクター」が入って、次の行「Down the ...」が始まっています。「return」のある全ての箇所に、もうひとつ「return」を追加して入れます。これにはコマンドの「replace(差し替え)」を使う事にします。フィールド「tRight」をゲットで受け、「it」の中にある全ての「return」キャラクターを「return & return」に差し替えたら、その「it」をフィールド「tLeft」に入れます。
get field "tRight"
replace return with return & return in it
put it into field "tLeft"
フィールド「tRight」をゲットして「it」に入れる
「it」の中の「return」キャラクターを「return & return」に差し替えなさい。
「it」をフィールド「tLeft」に入れなさい。
-- 「return」キャラクターは「cr」と同じ意味でなので「cr & cr」とも書けます。
-- 「cr」は Carriage Return の略。
図:「return」キャラクター を「retrun & return」に差し替え
それではキャラクターやライン等、テキストの基本的な事を調べて行きます。
始めに何文字のキャラクターがフィールド「tLeft」にあるか、尋ねてみます。キャラクターは複数形「characters」を使います。
put the number of characters of field "tLeft" into field "tRight"
フィールド「tLeft」に何文字あるかフィールド「tRight」に入れなさい。
短縮形の言葉を使っても書けます。number = num, field = fld
put the num of chars of fld "tLeft" into fld "tRight"
もうひとつ「length(長さ)」と言う言葉でも同じ結果が得られます。右のフィールドの文字列の後に、行替えして(return キャラクターを入れて)その結果を書き出します。「field」を「fld」の短縮形で書いています。
put return & the length of fld "tLeft" after fld "tRight"
行替えとフィールド「tLeft」の「the length(長さ)」をフィールド「tRight」の後に入れなさい。
図:「length」を使って、フィールドの最後の行に追加
次に何行のライン(the number of lines)が、フィールドにあるのか調べてみます。ラインの数を求める時はラインは複数形「lines」です。「field」を「fld」の短縮形で書いています。
put the number of lines of fld "tLeft" into fld "tRight"
フィールド「tLeft」の行数をフィールド「tRight」に入れなさい。
「number」の短縮形を使うとこうなります。
put the num of lines of fld "tLeft" into fld "tRight"
図:ライン数を右のフィールドに書きます。
これから分かる事はアキの行も1行と数えられますから、「line 1」は「CHAPTER 1」ですが、「line 2」は空白で、「line 3」は「Down the Rabbit-Hole」になります。では「line 5」を右のフィールドに入れてみます。この場合のラインは、ラインの数ではないので単数形です。「field」を「fld」の短縮形で書いています。
put line 5 of fld "tLeft" into fld "tRight"
フィールド「tLeft」の5行目をフィールド「tRight」に入れなさい。
図:「line 5」を右のフィールドに入れます。
「characters」「length」「lines」と、もうひとつテキストをカウントする言葉に「words」があります。これも「number」と組み合わせて、下の例文のように使います。
put the number of words of fld "tLeft" into fld "tRight"
フィールド「tLeft」の単語数(the number of words)をフィールド「tRight」に入れなさい。
put word 3 of line 3 of fld "tLeft" into fld "tRight"
フィールド「tLeft」の「line 3」の「word 3」をフィールド「tRight」に入れなさい。
-- 結果は「Rabbit-Hole」が入ります。
フィールド「tLeft」のライン1からライン5までを、フィールド「tRight」に入れます。
put line 1 to 5 of fld "tLeft" into fld "tRight"
フィールド「tLeft」の「line 1 から 5 まで」をフィールド「tRight」に入れなさい。
図:「line 1 から 5」を右のフィールドに入れます。
フィールド「tRight」のテキスト・サイズを「14」にします。
LiveCodeではフォント・サイズではなく「textSize テキスト・サイズ」と言います。
set the textSize of fld "tRight" to 14
フィールド「tRight」のテキスト・サイズを「14」に設定しなさい。
図:フィールド「tRight」のテキスト・サイズを「14」
フィールド「tRight」のテキスト・フォントを「Palatino」にします。
LiveCodeではフォントは「textFont テキスト・フォント」と言います。
set the textFont of fld "tRight" to "Palatino"
フィールド「tRight」のテキスト・フォントを「Palatino」に設定しなさい。
図:フィールド「tRight」のテキスト・フォントを「Palatino」
フィールド「tRight」の始めの行(line 1)のカラーを「Red 赤」にします。ここでは「textColor テキスト・カラー」と言う言葉を使いましたが、グフィックのカラー設定で使った「foregroundColor」と言う言葉でも、同じ意味で使う事ができます。またRGB値でのカラー設定もできます。
set the textColor of line 1 of fld "tRight" to Red
フィールド「tRight」のライン1のテキスト・カラーを「Red 赤」に設定しなさい。
図:フィールド「tRight」のライン1のテキスト・カラーを「Red」に
フィールド「tRight」全体のテキスト・サイズは14ポイントです。フィールド「tRight」の始めの行(line 1)のテキスト・サイズだけを18ポイントに変更します。
set the textSize of line 1 of fld "tRight" to 18
フィールド「tRight」のライン1のテキスト・サイズを18ポイントに設定しなさい。
図:フィールド「tRight」のライン1のテキスト・サイズを18ポイントに
タイトルの「Alice's Adventures in Wonderland」と、行を変えて作者の名前「Lewis Carroll」を「before」を使って始めの行に挿入します。ここでは「return」と同義語の「CR(Carriage Returnの略)」を使っています。「Carriage Return」は、昔風なタイプライターが紙を支えながら行替えするメカニズムを表す用語でしたが、コンピュータ時代にも言葉だけが残って、プログラミングでは行替えキャラクターとして「CR」と使われる事が多いです。「Lewis Carroll」の後に1行のをアキを取るので「& cr & cr」と行替えを2度行います。もうひとつ、あまり長過ぎるスクリプトの行が読みにくくなったり、エディターの横に入らなくなったらしたら、「\ バックスラッシュ」を行を変える最後に入れて行替えします。フィールドの横巾にタイトルが入りきらないので、手動でスタックの横を少し伸ばしました。
put "Alice's Adventures in Wonderland" &cr& \
"Lewis Carroll" &cr&cr before fld "tRight"
「Alice's Adventures in Wonderland」と行替えと「\ バックスラッシュ」
「Lewis Carroll」と行替え2回をフィールド「tRight」の前に入れなさい
図:フィールド「tRight」にタイトルと作者名を挿入
高速なリピートと、アルファベット順にソートする
今度は単語をバラバラにして、フィールドに並べてみます。リピートで単語(word)を1つづつ各行に置いて行く作業ですから、上で書いた方法で単語の総数を数えて、「repeat with i=1 to 単語の総数」と言う前章のループも使えますが、ここではより高速なループの処理をする「for each word」や「for each line」、「for each character」、「for each item」などの単位を区切りに使う方法をとります。マルチライン・メッセージ・ボックスから、フィールド「tRight」にある文章の全てを、単語別の行にするスクリプトを送ります。
put fld "tRight" into tText
repeat for each word tWord in tText
put tWord &cr after allWords
end repeat
put allWords into fld "tRight"
フィールド「tRight」のテキストを「tText」に入れます。
「tText」の単語(word)それぞれ1つづつを「tWord」と言うコンテナーに入れてリピートします。
「tWord」と行替え文字の「cr」を、「allWords」と言うコンテナーの後ろに入れて行きます。
全ての単語のリピートが終わったらリピートを終わります。
コンテナー「allWords」をフィールド「tRight」に入れます。
図:リピートで全ての単語を書き出す
これで全ての単語がフィールドに書き出されました。次にアルファベット順に単語を並べ替えたいのですが、下の方に2つ「`and」と「`without」と言う始めに記号の付いたのがありますから、その記号部分を取り除いてアルファベットだけで始まる単語にしてから、並べ替え(ソート sort)をします。
replace "`" with empty in fld "tRight"
図:単語をソート
フィールドのエディターにスクリプトを書く
「算数クイズ」の答えのフィールドのスクリプト・エディターに、「returnInField」と言うハンドラーのスクリプトを書きました。今度はフィールドにブラウズ・ツールのマウスが入れられないようにして、キャラクターや文字をクリックした時のスクリプトを書きます。左のフィールド「tLeft」の「Lock text」にチェックを入れてください(下図赤丸)。
ブラウズ・ツールを持ったままでスクリプト・エディターを開けるのは、Mac OSは「オプション+コマンド・キー」、Windowsは「コントロール+オルト・キー」で、オブジェクトをクリックします。始めに「on mouseUp」を書き込んで「リターン・キー」を叩くと、1行分アキを取って「end mouseUp」が自動で書かれます。「clickLine」を試してみましょう。
on mouseUp
put the clickLine into fld "tRight"
end mouseUp
上のように書き込んだら、エディター左上の「Apply」をクリックしてから、フィールドをブラウズ・ツールでいろいろな箇所をクリックしてみます。始めの行の「CHAPTER I」をクリックすると「line 1 of field 1」が出てきます。アキの行でも「line 4 of field 1」のように、全てのフィールドにある行の位置が返されます。
ここから実際の行の文字列を書き出してみましょう。「the clickLine」の前に「the text of 」を入れて
on mouseUp
put the text of clickLine into fld "tRight"
end mouseUp
とフィールド内を書き換えると、今度はクリックしたラインの文字列が書き出されます。次に「clickChunk」と言う言葉を使ってみます。「chunk」はひとかたまりと言う意味で、ひとかたまりのキャラクター・ナンバーを返します。ほとんどの場合このひとかたまりは、単語(word)と解釈して良いでしょう。「char 44 to 52 of field 1」などのキャラクター・ナンバーを、フィールド「tRight」に書き込みます。「char」は「character」の短縮形です。
put the clickChunk into fld "tRight"
put the text of clickChunk into fld "tRight"
こちらも「the text of clickChunk」にすると、実際の文字列が返されますが、上で「word ワード」を右のフィールドに書き込んだ時は「Rabbit-Hole」をひとつの単語としていましたが、「clickChunk クリック・チャンク」では「Rabbit」「-」「Hole」はそれぞれ独立した「chunk(ひとかたまりの文字列)」として捉えられます。
もうひとつキャラクターについて書いておきます。フィールド内のキャラクターのナンバーは「clickCharChunk」で得られます。使われている「char」は「character」の意味で、スクリプト中でも「char」の短縮形で使われます。
put the clickCharChunk into fld "tRight"
例えば、1行目の「CHAPTER I」の最後の「I」は「char 9 to 9 of field 1」が返されます。その前にあるスペースは「char 8 to 8 of field 1」で、3行目の始め「D」は「char 12 to 12 of field 1」です。つまり「space スペース」も、「return リターン(CR)」も1キャラクターと数えられます。実際のキャラクターそのものは「clickChar」で得る事ができます。
put the clickChar into fld "tRight"
プログラミングをして行くと、幾つかの文字コードを知っておく必要が出てきます。ASCII(アスキー)は、ヨーロッパ言語で使われるアルファベット、数字を中心とするキャラクターに数字を割り当てた文字コードです。キャラクターからASCII(アスキー)のナンバーを知るには「charToNum」と言うファンクションを使って小文字の「a」でしたら「charToNum("a")」のように使います。「the clickChar」を使ってASCII(アスキー)のナンバーを知るには
put charToNum(the clickChar) into fld "tRight"
反対にナンバーからキャラクターを知るのは「numToChar(97)」のように使います。これで小文字の「a」が返されます。例えばスクリプトを書いていて、前後の事情でキャラクターが直接書き込めない時などに、「numToChar(10)」のような形をとって使う事があります。今の処はこういう文字コードがあって、互いに変換できると言う事を知っているだけで良いでしょう。
フィールドの英語テキストを保存する
LiveCode7 注:英語の書類保存は日本語(ユニコード)では使えません。
マルチライン・メッセージ・ボックスから
ask file "Please name the file:" with "Alice.txt"
put it
を送ると、ファイルを保存するダイアログが出ます。
「キャンセル」をクリックすると、「it」は何も返しません。つまり「empty 空」を返します。もう一度メッセージ・ボックスから同じスクリプトを送って、今度はどこに保存するか「場所:」のフォルダーを選んで、「名前:」のファイル名「Alice.txt」はデフォルトのまま、ダイアログ右下「保存」を叩くと、メッセージ・ボックスに(私の場合は)「/Users/kenjikojima/Desktop/liveCodeStudy/Alice.txt」が返されました。「保存」でスクリプトの「it」から返される最後がファイル名になっている文字列を、私たちはファイル・パスと呼んでいて、これでどこにファイルを保存するかの指示をコンピュータに与えます。Windowsの場合は、通常こういうパスは日本語OSでは「¥ 円記号」(英語OSでは「\ バックスラッシュ」)を使いますが、LiveCodeではMac OS、Windows共に普通の「/ スラッシュ」を使います。この場合のテキスト・ファイルの名前には必ず「.txt」が必要です。
メッセージ・ボックスから送ったスクリプトの説明をします。「ask file ""」と言うのが、ファイルを保存する基本の形で、クオートの中に入れる文(ストリング)は、ダイアログ・ウインドウのタイトルになります。英文であればその時々の状況でどんな文にでもできます。その後の「with」に続くクオートの中は(例では「Alice.txt」)は、デフォルトのファイル名にします。「with」から後は、スクリプトに書いても、書かなくても良いです。現バージョンのLiveCodeは、ダイアログ・ウインドウのタイトルも、ファイル名も日本語にはできません。
左下にあるボタン「tLeft」のレイベル(Label)を、インスペクターで「保存」にします。テキストをファイルにしてローカル・ディスクに保存するには、「url ("file:" & ファイルパス)」を使います。「url 」は、ローカル・ディスクへのテキスト・ファイルの保存だけでなく、インターネットでファイルを送ったり、受けたりする時にも使われます。それでは、メッセージ・ボックスでテストした結果を考えながら、スクリプトを書き込みます。「--」の後の日本語は説明(コメント)です、スクリプト・エディターには書き込めません。
ask file "Please name the file:" with "Alice.txt"
if it is empty then
exit to top -- 全ての実行を中止する
else
-- もしファイル名に「.txt」が付いていなかったら、it の後ろに「.txt」を付ける
if character -4 to -1 of it is not ".txt" then put ".txt" after it
put field "tLeft" into url ("file:" & it)
end if
ask file "Please name the file:" with "Alice.txt"
if it is not empty then
if character -4 to -1 of it is not ".txt" then put ".txt" after it
put field "tLeft" into url ("file:" & it)
end if
-- 「exit to top」の考え方を理解する為に「if it is empty then」にしています。
ダイアログ・ウインドウの「キャンセル Cancel」がクリックされて「it」が空(empty)で返されたら、全ての実行を中止してトップに出ます。そうでなかったら(else)ファイル・パス(it)の最後にあるファイル名に「.txt」があるかどうかをチェックして、もしなかったら「it」で得たファイル・パスの最後に「.txt」を付けます。文字列の先頭のキャラクターは「character 1」と認識されて、次々にナンバーが振り当てられます。もうひとつ文字列のキャラクター認識は最後から「character -1」と番号が割り振られ、前に進むにしたがってマイナスのナンバーが増えて行く、システムになっています。従って最後に付いている「.txt」は「character -4 (.)」から「character -1 (t)」までの4文字ですから「character -4 to -1 of it」となります。これまで「if文」は「then」で行替えして、最後は「end if」で終わる形式を使ってきましたが、このように1行で書ける「if文」は、最後の「end if」を取り除く事ができます。
「url ("file:" & ファイル・パス)」はプレインな英語テキストの保存に使います。それ以外のイメージや日本語など、バイナリー・データ(プレイン・テキスト以外のデータ)の保存では「url ("binfile:" & ファイル・パス)」を使います。詳しくは後の章で。
LiveCode7 注:
日本語を外部書類にして保存するには、テキスト・フィールドの文字データを一旦ユニコードに変換して、それをバイナリーで保存します。
ユニコード(UTF8)での日本語書類保存は
put uniDecode(the unicodeText of fld 1, utf8) into url ("binfile:" &it)
「21:フィールドにある日本語の扱い」に詳しくあります。
ジオメトリーをスクリプトで書く
フィールドの章の最後に、スタックのリサイズに沿ってフィールドのサイズを変えたり、ボタンのロケーションを変えるスクリプトを書いておきます。ジオメトリー・マネイジーによらない、リサイズです。新しいメイン・スタックを作って、フィールドをひとつ、ボタンをひとつ作ったら、「resizeStack」ハンドラーをスタックのスクリプト・エディターに書き込みます。スタックのスクリプト・エディターを開けるのは「Objectメニュー > Stack Script」を選ぶか、アイコン・メニューの「Code」をクリックします。下の緑の文字すべてをスタック・エディターに書き込みます。
on resizeStack pWidth, pHeight
set the location of button 1 to \
(30 + the width of button 1 div 2), pHeight -30
set the rect of field 1 to 30, 30, pWidth -30, pHeight -60
end resizeStack
on ハンドラー「resizeStack」 pWidth(パラメータ横), pHeight(パラメータ縦)
(スタックの縦横の変化によって)
ボタン1のロケーションは(30 + ボタンの横の1/2), pHeight - 30に設定
フィールド1のレクト(rect 矩形)を \
30,30,pWidth(スタックの横)-30, pHeight(スタックの縦)-60に設定
end ハンドラー「resizeStack」
「on resizeStack pWidth, pHeight」の「pWidth」はスタックの横のピクセル数、「pHeight」はスタックの縦のピクセル数をパラメータに取ります。この「pWidth, pHeight」はユーザーがスタック・サイズを変えるごとにいつも変化します。図で赤で「30」とある場所は、常に30ピクセルのアキを保ちます。フィールドの底辺は常に60ピクセルです。ボタンのロケーションのX値は、フィールドの左横のアキ(30ピクセル)に、ボタンの横巾の半分を足したピクセル数です。
図:スクリプトを使ったスタックのリサイズ、
注:リサイズスタック(resizeStack)・ハンドラーを使うと、ジオメトリー・マネジャーの設定は無効になります。
Tips
- 1行が長過ぎて読みにくくなったりしたスクリプトは、行を変えたい最後に「\ バックスラッシュ」を入れて行を変えます。
- 「word ワード」や「line ライン」や「item アイテム(comma カンマ)」などで区切れるデータのループは、「repeat for each 区切りの語」を使うと高速な処理が行えます。
-
行替えのキャラクター「return」はしばしば、「Carriage Return」の短縮形「cr」が使われます。
-
ストリング(文字列)の先頭のキャラクターには「character 1(char 1)」の数字が割り当てられ、次々に番号が増えて行くシステムが取られています。先頭から10番目のキャラクターは「char 10」。同じようにストリングの最後のキャラクターには「char -1」が割り振られて、前に進むに従ってマイナスの番号が増えるシステムも、同時に取られています。最後のキャラクターから数えて5番目は「char -5」。
この章で新しく出て来た言葉
vScrollbar プロパティ(property) 縦のスクロールがあるかを返す
put the vScrollbar of field 1
replace コマンド(command) コンテナーにあるテキストを入れ替える
replace return with return & return in it
characters キーワード(keyword)
ソート・コマンドやナンバー・ファンクションにある複数の文字を示す 短縮形:char
put the number of characters of field "tLeft" into field "tRight"
length ファンクション(function) ストリング中にある文字数
put the length of fld "tLeft"
number ファンクション(function)
オブジェクトの数やストリング中の文字数 短縮形:num
the number of words of fld "tLeft"
textSize プロパティ(property) テキストを表示するポイント・サイズ
set the textSize of fld "tRight" to 14
textColor プロパティ(property) テキストを表示するカラー 同義語:foregroundColor
set the textColor of line 1 of fld "tRight" to Red
before キーワード(keyword) putコマンドと使ってフィールドの特定な前の箇所を指し示す
put "Alice's Adventures in Wonderland" &cr before fld "tRight"
each キーワード(keyword) repeatループの実行でそれぞれのラインやワード等の区切りを示す
repeat for each word tWord in tText
after キーワード(keyword) putコマンドと使ってフィールドやストリングの特定な後ろの箇所を指し示す
put tWord &cr after allWords
clickLine ファンクション(function) クリックされたフィールドのライン・ナンバーを返す
put the clickLine
clickChunk ファンクション(function) クリックされたフィールドの語(word)か文字のグループを返す
put the clickChunk
clickCharChunk ファンクション(function) クリックされたフィールドの文字(character)のポジションを返す
put the clickCharChunk
charToNum ファンクション(function) キャラクターのASCII ナンバーを返す
put charToNum("A")
numToChar ファンクション(function) ASCII ナンバーのキャラクターを返す
put numToChar(65)
ask file コマンド(command) ファイル保存のダイアログを表示する
ask file "Please name the file:" with "Alice.txt"
is not オペレータ(operator) ふたつの値を比べて等しくなければ真 同義語:<>
if character -4 to -1 of it is not ".txt" then put ".txt" after it
url キーワード(keyword) コンテナーにローカルかインターネット・ファイルが含まれているのを意味する
put field "tLeft" into url ("file:" & it)
resizeStack メッセージ(message) スタックのウインドウ・サイズが変わったかコードに送る
on resizeStack pWidth, pHeight