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

1. ボタン
  ここではいくつかのボタンの説明をします。
  
1.1. その1(Phi::Button)
  典型的なボタンです。%href: ./rb/button1.rb button1.rb%

--ruby
001  require 'phi'
002  form = Phi::Form.new(:form1, 'formです')
003  button = Phi::Button.new(form, :button1, 'hoge')
004  button.on_click = proc do
005    t = Time.now.to_s
006    print t, "\r\n"
007    button.caption = t
008  end
009  form.show
010  Phi.mainloop
--
  
  このスクリプトを実行すると、%href: img/button1.png このような% ウィンドウがあらわれます。

1.1.1. 解説
  3行目でPhi::Buttonのオブジェクトが生成されます。この時、ボタンの文字列は 'hoge' です。 Phi::Button.new の引数の扱いは Phi::Label.new と同じです。

  4〜8行はボタンが押された時の動作を決めています。ボタンが押されると、button.on_click( Phi::Button#on_click )という属性に代入された Proc のオブジェクトの内容が実行されます。Procのオブジェクトの内容は現在の日時の取得、現在の日時の操作卓への表示、ボタンの文字列の変更となっています。ここで使われている Time は Ruby の組み込みクラスで、時間に関係する処理を行うクラスです。詳しい使用法についてはRubyのドキュメントを見てください。 

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

: Rubyの組み込みクラス
* Time

: Phi::Button#
* Phi::Button.new
* Phi::Button#on_click ( Phi::Control#on_click )

1.2. その2(Phi::SpeedButton)
  外見を変更することでツールバーのボタンに似せることができます。%href: ./rb/button2.rb button2.rb%

--ruby
001  require 'phi'
002  
003  form = Phi::Form.new(:form1, 'formです')
004  button = Phi::SpeedButton.new(form, :button1, 'hoge')
005  button.flat = true
006  button.allow_all_up = true
007  button.group_index = 1
008  button.on_click = proc do
009    if button.down?
010      button.caption = '1'
011    else
012      button.caption = '2'
013    end
014  end
015  form.show
016  Phi.mainloop
--

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

1.2.1. 解説
  4行目でPhi::SpeedButtonのオブジェクトを生成し、5〜8行でボタンの外見等を設定しています。button.flat( Phi::SpeedButton#flat )の属性にtrueを代入することでツールバーのボタンのような外見にし、button.allow_all_up( Phi::SpeedButton#allow_all_up )の属性にtrueを代入することでグループ化されたボタンがすべて上がった状態にできるようにします。button.group_index ( Phi::SpeedButton#group_index )は同じ番号を持つ複数のPhi::SpeedButtonのオブジェクトをグループ化する属性です。上のスクリプトではボタンは一つしかないので、7行目は一見関係ないように思われますが、この行がないと、 button.allow_all_up = true の設定がうまくいきません。

  8〜14行目でボタンが押された時のイベントを設定しています。button.down?( Phi::SpeedButton#down? )はボタンが下がっている時にtrueを、ボタンが上がっているときにfalseを返します。

  if は Ruby の条件分岐をするための構文です。「if 〜」の〜の部分がtrue を返す時にその次の部分が実行されます。いくつかの条件がある時は elsif を使って条件分岐を行います(elseif ではないことに注意してください)。 if や elsif の条件を調べて、すべての条件に一致しない時に else の次の部分が実行されます。if の詳しい使い方については Ruby のマニュアルを読んでください。

  ここではボタンが下がるとボタンには1が表示され、ボタンが上がるとボタンには2が表示されるということになります。

1.2.1.1. クラスやメソッド
: Phi::SpeedButton#
* Phi::SpeedButton.new
* Phi::SpeedButton#allow_all_up
* Phi::SpeedButton#caption
* Phi::SpeedButton#down ( Phi::SpeedButton#down? )
* Phi::SpeedButton#flat 
* Phi::SpeedButton#group_index
* Phi::SpeedButton#on_click ( Phi::Control#on_click )



1.3. その3(Phi::RadioButton)
  いくつかの選択肢から一つだけを選択されるようにしたい時に使われます。%href: ./rb/button3.rb button3.rb%

--ruby
001  require 'phi'
002  
003  form = Phi::Form.new(:form1, 'formです')
004  button = Phi::RadioButton.new(form, :button1, 'hoge')
005  form.on_click = proc do
006    if button.checked?
007      print "checked\r\n"
008    else
009      print "not checked\r\n"
010    end
011  end
012  form.show
013  Phi.mainloop
--

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

1.3.1. 解説
  4行目でPhi::RadioButtonのオブジェクトを生成しています。

  5〜11行はフォームがクリックされた時のイベントを設定しています。button.checked?( Phi::RadioButton#checked? )はボタンがチェックされている時に true を、そうでない時にfalse を返します。

  上の Phi::RadioButton#checked? の説明から分かると思いますが、フォームがクリックされた時にラジオボタンがチェックされていれば、操作卓には"checked" が表示され、ラジオボタンがチェックされていなければ"not checked"が表示されます。

1.3.1.1. クラスやメソッド
: Phi::RadioButton#
* Phi::RadioButton.new
* Phi::RadioButton#checked ( Phi::RadioButton#checked? )
