title: Phi::Control
author: YOSHIDA Kazuhiro
mailto: moriq@moriq.com

1. Phi::Control

すべての Visual Component の抽象クラス

1.1. super class

Phi::Component

1.1. properties

: parent
  親 Phi::Control を与える。

: name : String
  名前を指定する。 Phi は name の変更を保証しない。

: left : Fixnum
  左端の水平座標における親に対する相対距離を指定する。

: top : Fixnum
  上端の垂直座標における親に対する相対距離を指定する。

: width : Fixnum
  水平方向の大きさを指定する。

: height : Fixnum
  垂直方向の大きさを指定する。

: enabled : Boolean
  無効であるか。通常，無効になった component は淡色で表示される。

: visible : Boolean
  表示しているかどうか。実際に見えるかどうかは分からない。事実， visible が true でも，親であるコンテナが表示されていないと見えない。このために， #showing がある。

  visible は #hide で false になり， #show で true になる。

: align : Fixnum
  コンテナ ( 親 control) 内で control を揃える方法を指定する。 constants#Align を参照のこと。

: anchors : Fixnum
  control がどのように親に対して固定されるかを指定する。 constants#Anchors を参照のこと。

: color : Fixnum
  背景色。

: parent_color : Boolean
  親と同じ背景色を使うかどうか。

: font : Font
  フォント。

: parent_font : Boolean
  親と同じフォントを使うかどうか。

: cursor : Fixnum
  マウスカーソルの画像を示す。 constants#Cursor を参照してください。

: hint : String
  マウスが Phi::Control 上を移動するときに表示されるテキスト文字列を保持する。

: show_hint : Boolean
  ヘルプヒントを表示するかどうか。

: parent_show_hint : Boolean
  親の #show_hint を使うかどうか。

: drag_cursor : Fixnum
  コントロールがドラッグされているときに表示されるマウスポインタを表すイメージ #cursor

: drag_mode : Boolean
  コントロールがドラッグアンドドロップ操作またはドラッグアンドドック操作をどのように開始するか

1.1. attributes

: parent : Phi::Control

1.1. methods

: show : nil
  見せる。 #visible を true にする。

: hide : nil
  隠す。 #visible を false にする。

: screen_to_client(point) : Point
  画面上の指定した点の画面座標をクライアント座標に変換する。

  : point : Phi::Point

  %c:screen_to_client% を使うと，点の画面座標をローカルまたはクライアント領域の点の座標に変換できる。

  クライアント領域座標の %c:(0, 0)% はコントロールのクライアント領域の左上隅に相当する。画面座標の %c:(0, 0)% は画面の左上隅に相当する。

  #client_to_screen と %c:screen_to_client% を使うとコントロールの座標系を別のコントロールの座標系に変換できる。
--ruby
p = target_control.screen_to_client(source_control.client_to_screen(p))
--
  この例は %c:p% を %c:source_control% の座標から %c:target_control% の座標に変換する。

: client_to_screen(point)
  点のクライアント領域座標をグローバルな画面座標に変換する。

  : point : Phi::Point

  %c:client_to_screen% は，コントロールに対してローカルな座標で表されていた位置を，画面座標の対応する位置に変換できる。

: set_focus
  入力フォーカスを当該コントロールに変更する。フォーカスがあるコントロールは，キーボードイベントを受け取る。
  Control#set_focus はフォームが表示されていない状態（ Form#show Form#show_modal されていない状態）では「無効/非表示ウィンドウにはフォーカスを設定できません」というエラーになる。その場合には Form#focus_control= を使用すること。
  --ruby
require "phi" ; include Phi
form = Form.new
edit1 = Edit.new form
edit2 = Edit.new form
button = Button.new form
edit2.top = edit1.bottom
button.top = edit2.bottom

##button.set_focus  # error
form.focus_control = button  # OK

button.on_click = proc{ edit1.set_focus } # OK
##button.on_click = proc{ form.focus_control = edit1 } # OK

form.show
mainloop
--

1.1. event handlers

: on_can_resize(array) : arg1
  コントロールのサイズを変更しようとしたときに発生する。

  : array : [new_width, new_height, resize]

  : new_width : Fixnum
    オブジェクトの新しい幅

  : new_height : Fixnum
    オブジェクトの新しい高さ

  : resize : Boolean
    サイズ変更が可能な場合は %c:true% を返し，サイズ変更を中止する必要がある場合は %c:false% を返す。

  %c:on_can_resize% を使うと，コントロールをサイズ変更する方法を調整できる。必要であれば， %c:on_can_resize% でコントロールの新しい幅と高さを変更する。 %v:resize% を %v:false% にして返すと，サイズ変更が中止される。

  %c:on_can_resize% ない場合，または %v:resize% が %c:true% の場合， %c:on_can_resize% の直後に %c:on_constrained_resize% が発生する。

: on_constrained_resize(array) : arg1
  #on_can_resize の直後に発生する。

  : array : [min_width, min_height, max_width, max_height]

  : min_width : Fixnum
    オブジェクトの幅のサイズ変更可能な最小値

  : min_height : Fixnum
    オブジェクトの高さのサイズ変更可能な最小値

  : max_width : Fixnum
    オブジェクトの幅のサイズ変更可能な最大値

  : max_height : Fixnum
    オブジェクトの高さのサイズ変更可能な最大値

  %c:on_constrained_resize% を使うと， self をサイズ変更しようとしたときに， self のサイズ制約を調整できる。 %c:on_constrained_resize% に入るときに， %v:array% が #constraints の対応する property に設定される。新しい高さおよび幅になる前にそれらの値を調整できる。 #can_auto_size または #on_can_resize がすでにこの新しい高さと幅を調整していることもある。

  %c:on_constrained_resize% から出るときに，新しい高さと幅に制約が適用される。制約が適用されると，コントロールの高さと幅が変更される。コントロールの高さと幅が変更された後で， #on_resize が発生して，最終的な調整または応答が可能になる。

: on_resize : nil
  %c:on_resize% を使うと，コントロールのサイズが変更された後で最終的な調整を行える。コントロールのサイズを変更しようとしたときにコントロールが応答する方法を変更するには，かわりに #on_can_resize または #on_constrained_resize を使うこと。

: on_click : nil
  ユーザーがコントロールをクリックしたときに発生する。

: on_dbl_click : nil

: on_drag_drop : nil

: on_drag_over : nil

: on_end_dock : nil

: on_end_drag : nil

: on_mouse_down : nil

: on_mouse_move : nil

: on_mouse_up : nil

: on_start_dock : nil

: on_start_drag : nil
