title: Apollo チュートリアル
Author: NISHIO Mizuho
mailto: mzh@portnet.ne.jp

1. ラベル
  文字列を表示させる時に使われるコントロールです。apollo.exeの操作卓の左上にある「ch: 」というのはラベルの文字列です(多分)。

1.1. その1(ラベルをのせる)

  %href: ./rb/label1.rb label1.rb%

--ruby
001  require 'phi'
002 
003  form = Phi::Form.new(:form1, 'formです')
004  label = Phi::Label.new(form, :label1, 'ラベルです')
005  form.show
006  Phi.mainloop
--

  このスクリプトを実行すると、%href: img/label1.png このような% ウィンドウがあらわれます。

1.1.1. 解説
  4行目で Phi::Label のオブジェクトが生成され、生成されたラベルはフォームの上にのります。

  Phi::Label.new には3つの引数があります。第1引数はどのコントロールの上にのるか指定します。この場合は form になっていますので、フォームの上にラベルがのることになります。この時のフォームとラベルの関係を「フォームはラベルの親コントロールである」という言い方をします。第2引数は Phi::Form.new の第1引数と同じものです。この説明は最後に行います。第3引数はラベルに表示される文字列を指定します。この場合は第3引数は 'ラベルです' なので、ラベルにはその文字列が表示されます。

  それでは第2引数の説明をします。まずは過去の説明を載せます。

--text
Q. 「label = Phi::Label.new(form, :label1, 'hoge')」の「:label1」ってなんですか？ 

A. form.label1 の形でアクセスできるようにするための名前です。
さらに、Phi::SCREEN.form1.label1 のように Phi::SCREEN からた
どっていく形式であれば、どんなスコープからでも参照可能になります。 

A. Phi のコンポーネントの new コンストラクタの引数は、通常の場合 
第1引数が parent、 
第2引数が parent.id の形式で参照するためのID名のID番号 
第3引数が キャプション（またはデフォールトのテキスト） 
となっています。 

A. form のスコープにおいて下の３行を記述したのと同じ働きをします。 
@label1 = Phi::Label.new(form)
@label1.name = 'label1' 
attr :label1

A. 「:label1」の「:」は Rubyのマニュアルで「:symbol 識別子/変数名/演算子と
一対一対応するSymbolクラスのオブジェクト．」とあるものです。識別子のID番号、
ということでしょう。

A. ap-list.436 
--

  一番分かりやすいのは最初の説明ですが、それでも少し分かりにくいと思います。ここでは下の二つを説明として載せます。が、これも分かりにくいと思います。次のスクリプトで第2引数を使ったスクリプトの実例をあげるので、分かりにくい時はここを読み飛ばしてください。

1.1.1.1. 第2引数の説明
  
  Ruby で言えば、「Phi::Label.new(form, :label1, "hoge") とすることで、form に対してlabel1 という特異メソッドを定義し、form.label1 で form の Phi::Label のオブジェクトにアクセスすることができるようにします」という説明になります。

  Delphiで言えば、「Phi::Label.new(form, :label1, "hoge") はラベルの name プロパティ(ここではDelphiの name プロパティを指します)を label1 に設定することと同じです。これによって form.label1 で form の Phi::Label のオブジェクトにアクセスすることができます。」という説明になります。 (求む 添削)

1.1.1. クラスやメソッド
: Rubyの組み込みクラス
* Symbol

: Phi::Label#
* Phi::Label.new
  
1.2. その2(ラベルの見た目を変更する)

  %href: ./rb/label2.rb label2.rb%

--ruby
001  require 'phi'
002 
003  form = Phi::Form.new(:form1, 'formです')
004  label = Phi::Label.new(form, :label1, 'ラベルです')
005  form.label1.caption = 'しんどいよう。眠いよう。駄目駄目だよう。'
006  label.color = Phi::CL_GREEN
007  form.show
008  Phi.mainloop
--

  このスクリプトを実行すると、%href: img/label2.png このような% ウィンドウがあらわれます。

1.2.1. 解説
  5行目はその1で説明した第2引数の :label1 の使い方になっています。5行目では4行目に生成したPhi::Label のオブジェクトに対して form.label1 でアクセスしており、6行目では 同じオブジェクトに対して label でアクセスしています。この他にも Phi::SCREEN を使って Phi::SCREEN.form1.label1 のようにしてラベルのオブジェクトにアクセスすることもできます。

  5行目の form.label1.caption ( Phi::Label#caption ) はラベルに表示される文字列を変更するための属性です。4行目で Phi::Label のオブジェクトが作られた時、ラベルの文字列は 'ラベルです' ですが、この行で文字列が 'しんどいよう。眠いよう。駄目駄目だよう。' に変更されます。

  6行目はラベルの色を変更しています。Phi::CL_GREENは緑色を表わす定数なので、label.color ( Phi::Label#color )という属性に代入することで、ラベルの色が緑色になります。他にもいくつかの色がPhiのモジュールに定義されていますので、クラスブラウザーで調べてみてください。Phiのモジュールで定義されていない色を使いたい場合は 0x005555d0 のように数字を使って色を指定します。最後の6つの数字(16進数)で色の3要素のBGR(青、緑、赤)を指定します。

1.2.1. クラスやメソッド
: Phi::Label#
* Phi::Label#caption
* Phi::Label#color
