RealBasic University

このコラムはStone Table Softwareのオーナーであり、またREALbasic Developerの編集者でもあるMarc Zeedar氏により書かれたものを、著者の許可を得て翻訳したものです。この翻訳はHREM Researchにより提供されています。この日本語版へのご意見はRBU-Jまでご連絡下さい。

URL: http://www.applelinks.com/rbu/013/
INDEXに戻る

GenderChangerのコンパイル

今まで、我々は REALbasic の環境下で GenderChanger をテストすることができました。それはテストにはいいのですが、もしあなたが新しいプログラムをおばあちゃんに送ろうと思ったときには、それは不都合です。

REALbasic はMacintosh(そして、多少なりともWindows)で「独立に動く」アプリケーションを作成する機能を持っています。そして Mac を持っているどの人もあなたのプログラムを走らせることができ、その人たちは REALbasic を持つことも、あるいは REALbasic に関して何も知る必要もありません。

独立なプログラムをコンパイルするには幾つかのステップが必要です。まず、もし、あなたがそのアプリケーションを配布(例えば、フリーウェアやシェアウェアとして)しようと考えているならば、そのプログラムに対してユニークな Creator コードを決める必要があります。アップル社は Creator コードの情報を管理しています。ですから、あなたは別の人が同じコードを使うことが無いようにあなたのコードを登録することができます。(コードは必ず4文字で、大文字小文字が区別されます。アップル社はすべて小文字のコードを自分たちのために予約していますので、あなたのコードは少なくとも1つの大文字を含む必要があります。)

Note:もし、2つのプログラムが同じ Creator コードを使ったらどうなるでしょうか?何もそれほど恐れることは起りません、しかし、あなたの Mac は混乱するでしょう。もし、あなたがアプリケーション A の文書をクリックすれば、代わりにアプリケーション B が起動するかも知れません。アプリケーションのアイコンもまた入れ替わるでしょう。ユニークなコードを使うということはすべてのアプリケーションがユニークな「名前」を持つことを保証します。

私はすでに GenderChanger のコードとして "GdCh"を登録しています。それを設定するのは、Edit メニューに行き、"Project Settings"オプションを選択します。そして、Creator コードとして "GdCh" と入力します:

アプリケーションの Creator コードを設定すれば、コンパイルの準備が整いました。

Note:Creator コード無しでもコンパイルをすることは可能です。しかし、プログラムにカスタムアイコンを付けようとすると、Mac はあなたのプログラムを一般的なアプリケーションと思いますので、それは問題を引き起こします。あなたのプログラムがカスタムアイコンを持つためには、ユニークな Creator コードを持つことが必須です。

File メニューに行き、"Build Application" を選びましょう。すると、次のようなダイアログが現れます:

ここでのオプションによりプログラムに色々な設定をすることができます。プログラムに名前を付ける、使用メモリーを設定する、68K 用または PowerPC 用にコンパイルする等々。GenderChanger では特別な要求はあまり多くはないので、その内の幾つかだけを設定します。

作成するアプリケーションの種類として "Macintosh" のチェックボックスを選択します。(Windows は Type と Creator コードを使いませんので、GenderChanger を Windows用に作ることは意味がありません。)そして、名前欄に "GenderChanger"と入力します。

GenderChanger は処理速度が問題となるような処理は行ないませんので、PowerPC アプリケーションである必要はありません:68K でも十分な速度が得られます。PPC用にコンパイルすれば処理速度が重要なアプリケーションは速くなりますが、PPC用アプリケーションはより多くのメモリーを必要とし、またサイズも大きくなります。GenderChangerを両方のバージョンでコンパイルして、それらを比較してみるといいでしょう。

Note:同時に 68K と PPC バージョンを作ることはできません -- まず一方のバージョンをコンパイルして、それから他方をコンパイルしなければなりません。両方のボックスをチェックすることは可能ですが、それは PPC コードの中に 68K コードを追加して"Fat" アプリケーションといわれるものを作ります(コンパイルされたプログラムのサイズはさらに大きくなります)。それはそのアプリケーションが PowerPC または 68K のどのような Mac 上でも走ることを意味します。もし、68K 用としてコンパイルすれば、アプリケーションは PowerMac上ではエミュレーションモードで走ります、しかし PPC アプリケーションは 68K Mac 上では全く走りません。

アプリケーションに十分なメモリーを与えているか確かめましょう。GenderChanger では多くのメモリーは必要ありません。標準は 1024 ですが、最近は RAM が安いので、私は最小値はあまり使いたくありません。私は 2024 にしました、これは十分なはずです。

Note:残念ながら、REALbasic はプログラムがもっと多くのメモリーを必要とするのかを知るための簡単な方法を持ってはいません。もし、メモリーが足りなくなると、あなたのアプリケーションはそのままクラッシュするでしょう。あなたのプログラムの最適な設定を見つけるためには実験をするしかありません。多めに設定しておくに越したことはありません。

次に、あなたは GenderChanger のバージョン情報を設定したいでしょう。これは Finderの Get Info コマンドで表示される情報です。

GenderChanger は完全に完成したと思われるほどにはまだ十分に洗練されていませんので、私はそれを「開発」バージョン (1.0d) としました。あなたのプログラムでも、バージョン番号を更新していくことを強く推奨します。プログラムを幾分でも変えたときにはバージョン番号を変えて、変更のリストをどこかに(私はアプリケーションの Open イベントのコメント行を使っています)保存しておきましょう。

グラフィックがその横にあるアイコン設定もあることに気が付きましたが。ご希望とあれば、画像を選んでペーストすることにより、GenderChanger の icon を設定することができます。(新しい画像をつくるのにはどのようなグラフィックプログラムでも使うことができますし、ResEdit のアイコンエディタを使うこともできます。)もしアイコンを変更しなければ、あなたのプログラムは REALbasic の標準の立方体のアイコンを使うことになります。

すべての情報の設定が終われば、"Build" ボタンをクリックします。コンパイルの進行状況を示すプログレスバーが表示され、数秒後にはダブルクリックで起動する新しいアプリケーションがあなたのハードディスクに作られているでしょう。さあ、試して見て下さい!

Note:REALbasic は Build Application ダイアログの設定を記憶していますので、あなたはそれらの設定を一度入力すればいいだけです。その後は、ただバージョン番号を変更して再コンパイルができます。

先週のクイズの解答

先週のコラムではバグのあるコードがあり、そのエラーの発見を読者にお願いしていました。何か判りましたか?誰もこのコンテストにはパスしませんでした。誰もエラーを発見できなかったのか、あるいはクイズに興味が無かったのかよく判りませんが、ここで答えを示します。

問題は Edit File Types ダイアログボックスのリストボックスでの delete キーの処理のコードでした。アイデアはユーザが delete キーを押したときに、選択されているファイルタイプを削除することです。次にもとのバグのあるコードを示します:

editDialog.ListBox1.KeyDown のコード

  if key = chr(8) then
    me.removeRow me.listIndex
  end if

表面上はこれで良いように見えますが、我々は微妙なことを忘れていました:我々はユーザがリストボックスのある行を選択したのかをチェックしていません!上のコードの GenderChanger を実行して、 Edit File Types ダイアログボックスで、ファイルタイプをリストボックスで選択しない状態で、delete キーを押したとすると、GenderChanger は "out of bounds" エラーで終了するでしょう。

これはあなたが存在しない配列の要素をアクセス(利用)しようとしている(あるいは、配列の範囲を超えている)ことを意味します。リストボックスの行は配列として保存されていることを覚えておきましょう。ユーザがどの行も選択していない場合には、listBox1.listIndex は -1 に設定されています。me.removeRow me.listIndex コマンドを実行しようとすると、あなたは REALbasic に行 -1 を削除するように指示していることになります:そのような行は存在しませんので、エラーとなります。

これを解決するのは簡単です。コラム10 で Window1 のリストボックスに使ったコードを考察しましょう。

Window1.ListBox1.KeyDown のコード

  if key = chr(8) and me.listIndex > -1 then
    me.removeRow me.listIndex
  end if

違いが判りましたか?ほとんど同じですが、押されたキーが delete キーであることを確認するためのチェックに加えて、我々が存在しない行を削除しようとしていないことを保証するために、listIndex が -1 以上であることも確認しています。ですから、バグのないコードは次のようなものであるべきです:

editDialog.ListBox1.KeyDown のコード

  if key = chr(8) and me.listIndex > -1 then
    me.removeRow me.listIndex
  end if

このように修正すれば、Edit File Types ダイアログボックスで行を選択しないで delete キーを押しても、GenderChanger はクラッシュしないでしょう。

GenderChanger のまとめ

これで GenderChanger は完成しました。私はここで我々が成し遂げたことを簡単に振り返ってみようと思います。これはREALbasic University の最初のプロジェクトで、うまくいったと思いますが、私は今後のプロジェクトがさらに良くなる(そうありたいと思います)ようなコラムの書方について幾つかのことを学びました。

我々はまず GenderChanger の動作を第6講で検討することから始めました。今は我々は動作する GenderChanger を手に入れましたので、そのコラムに立ち戻って、私が正しいデザインを選択したのかを検討するのは有意義でしょう。別のインタフェースがもっとうまくいったでしょうか? GenderChanger の不備な点を直すことによって、あなたは GenderChanger を改良できないでしょうか?

たぶん、アプリケーションを注意深く計画することがどれ程重要であるかが理解できるでしょう:アプリケーションがどのように機能するかデザインすることはアプリケーションが成功するために重要です。

第7講第8講では GenderChanger のユーザインタフェース(ユーザが利用するウィンドウとコントロール)を作りました。デザインがどれほど強くユーザインタフェースと結びついているかが容易に理解できるでしょう。計画が十分であるので、どのようなウィンドウやインターフェイスを我々が必要としているかを知ることは容易でした。しばしば、インタフェースをデザインするときに、可能性のあるものを紙にスケッチすることにより、これらの2つのステップを結合するほうがより容易でしょう。インターフェイスのデザインができれば、少しは退屈かも知れませんが、REALbasic でインターフェイスを作るのは簡単です。

我々は第9講でコードを実際に入力することを開始し、それは第10講, 第11講、そして第12講と続きました。

どのようにコードを書くかを学ぶことはプログラミングを学ぶうえでの最大の難関です。もし、あなたが他の言語に精通していれば、REALbasic の学習は RB 流のやりかた、その特有な構文、そしてバグとくせなどを単に学習するだけです。もし、あなたが全くプログラミングに初めてであれば、コードの書方を学ぶには時間が掛かるでしょう:それらすべてを同時に説明するには、プログラミングには多くの側面がありすぎます。しかし、我々が REALbasic の異なる側面を解析し、色んなプログラムを作るにしたがって、あなたは色んなテクニックや異なる種類のソフトウェアをプログラムする方法を学ぶでしょう。

例えば、我々が GenderChanger を作ったときに学んだことを見てみましょう:

振り返ってみると、別のやり方をすべきだったところもあります。まず最初に、GenderChanger は我々の最初のプロジェクトとしては複雑すぎました。もっと簡単なものを選ぶべきでした。2つ目は、ループやif-then 構文などのプログラミングの基本的な術語やテクニックについて、実際のプロジェクトを始める前に説明すべきでした。

しかしながら、講義は退屈です:実際のアプリケーションを作るのはもっと楽しいですし、あなたはそれにより勉強できます。今後は、講義とプロジェクトとをもう少しうまくバランスさせようと思います;うまくいっているかを知らせてください。

読者のフィードバックと書くことによって学んだことをもとに、今後の REALbasic University のコラムを次のようにいくらか改善しようと思います:

私は REALbasic University の今までの進展に満足しています。私はそれらのコラムの1つずつがそれだけで独立しているのではなく、全体として機能することを意図しています:1年程すれば、積みかさなったコラムは新しいユーザにとって素晴らしい入門書となっているでしょう。

これは大変な仕事ですが、私はその過程を楽しんでいます、そして、それは自分のプログラム上の決断の理由を解析する機会を与えてくれます。私の出来栄えを知らせて下さい、そして私をいつも気を張りつめた状態にして下さい!

次週

気分を転換するために、Erick Tejkowski 氏の新しい本 REALbasic for Dummies を論評します。

Letters

今週は Gary Trazanka さんと遣り取りした email の一部を公開します。彼は次のように言ってきました:

ます最初に、私は RBU のコラムを本当に楽しんでいます。すべてのレッスンは有益です、そして、全体の過程をまとめたコラムはボーナスとなるでしょう。有り難う御座います。

以下は私の質問です:文字列の倍精度、また倍精度の文字列への変換すること。私は変換プログラム(インチからフィート、フィートからインチなど)を作っています。

倍精度あるいは文字列であるべきフィールドはどのように設定すればいいのでしょうか?

私が倍精度を文字列に変換しようとすると(例、STR(NumToConv))、値としてゼロを表示します。また、倍精度と文字列を同じ文字入力欄に表示する(例、12 Inch)のはどうすればいいのでしょうか?

私の答え:

あなたの質問を理解したか確信がありませんが...文字入力欄は<いつでも>文字です。それ以外のものを持つことはできません。しかし、あなたは倍精度から文字列へ、あるいはその逆に、変換することが可能なので、それは問題とはなりません

私はあなたの質問に対して他のコラムでもっと詳しく答えるでしょう。しかし、今のところは、オンラインヘルプで format() コマンドを確かめましょう。

Format() はちょうど str() 関数のように数値を文字列を変換します。しかし、あなたはどのように数値が変換されるかを指示することができます。例えば、以下のようにして小数点以下5桁を表示することが可能です:

editField.text = format(theNumber, "#######.#####")

これは明らかに Gary さんにとって十分だったようです。彼は次のように返事してきました:

いやはや、有り難う御座います!

私のプログラミングの経験は PC 上の VB だけです。しかし、私は Mac が好きなので、RB に乗換えようと試みているところです。私はプログラムをインポートして、それを最初から始めました。

VB の editfields では .value を付けることによって数値を付加することができました。あるいは、文字列が欲しければ、editfield のラベルにただ .text を付けるだけでした。

あなたが editfield は文字列を含むことができるだけですと言われた瞬間に、なぜ STR や Val の変更が上手くいかないのかが判りました。

10分後には、それはもう動いていました。

興味あることですね、Gary さん。Visual Basic (VB) は PC用ですので、私はそれを使ったことがありません。それで、それが editField に数値を保存することができるとは知りませんでした。REALbasic では editFields は文字列データ(テキスト)だけしかを含むことができません。VB を使っていないので、その方法がよりすぐれているかどうかについては何も言えません;個人的には、Format コマンドでの制御で満足しています。

Format コマンドの詳細を知るには REALbasic のヘルプを参照して下さい。しかし、手短に言えば、あなたは数値が文字に変換される様子を示す特別な変換文字列を指示することができるということです。変換文字列内では、"#" は1桁の数字を表します:その数字はそれが存在するときのみ表示されます。"0" はまた数値を表しますが、数値が存在しないときにはゼロが表示されます。

ですから、 msgBox format(450.000, "#####.###") は "450." と表示され、一方 msgBox format(450.001, "#####.###") は "450.001" と表示されます。

しかし、もし、あなたが "#" の代わりにゼロを使うと、msgBox format(450.000, "00000.000") は "00450.000" と表示されます。すなわち、それが実際の数値の一部であろうとなかろうとゼロが表示されます。

また、記号や、特殊な文字を含むこともできます。例えば、ドル記号と少数以下2桁の金額として数値を印刷したいとしましょう。

以下のコードは "$3560.30" と表示します:

   msgBox format(3560.3, "\$#####0.00")

もし、千の位置にコンマを含めたい場合には、これを次のように変更すれば、"$3,560.30" と表示されるでしょう:

   msgBox format(3560.3, "\$###,##0.00")

(訳注:ここで "\" 記号はエスケープ文字で、"\" 自身は表示されません。円記号は "\\" とすれば表示されます。)

非常に大きな数値に対しては format は非常に重要です:formatstr との違いを見てみましょう。ボタンに次のコードを対応させて、プログラムを実行させ、そのボタンを押して見ましょう:

  dim n as double

n = 450343029420.93005 msgBox str(n) msgBox format(n, "###,###,###,###,###,###.#####")

上のコードは最初に "4.503430e+11" と表示し、それから "450,343,029,420.93005" と表示します:数学的には同じ数値(少なくとも精度の範囲内で)ですが、表現は大分異なります。

Format コマンドを色々と試して見るといいでしょう:それは非常に強力で、倍精度(小数点を含む数値)を適切に文字列(テキスト)に変換するのに必要になります。

RBU のための今後のプロジェクトに関するアイデアはありませんか?REALbasic に関する質問はありませんか?あなたの質問とコメントを送って下さい!

RBUの通知への申し込み!

別のお知らせ:Applelinksは要望の大きかったREALbasic Universityへのメーリングリストを開設しました。今日申し込みをすれば、コラムが発表されるたびにお知らせの emailがあなたに届きます!これはRBUに遅れを取らないための便利なお知らせです。

RBU-Jの通知サービス!コラムが発表されるたびに日本語版REALbasic Universityのお知らせの emailがあなたに届きます。登録・削除は ここ から。

INDEXに戻る