##
2 フォームオブジェクト

フォームオブジェクト（上で述べた`make_form()`で返されます）には 下記のメソッドがあります。 各メソッドは名前の接頭辞に"`fl_`"を付けたCの関数に対応します；また、 最初の引数はフォームのポインタです； 説明はFORMSの公式文書を参照してください。

全ての`add_*()`メソッドは、FORMSオブジェクトを示すPythonオブジェ クトを返します。 FORMSオブジェクトのメソッドを以下に記載します。 ほとんどのFORMSオブジェクトは、そのオブジェクトの種類ごとに特有のメソッ ドもいくつか持っています。

`show_form`( | placement, bordertype, name)

  フォームを表示します。

`hide_form`( | )

  フォームを隠します。

`redraw_form`( | )

  フォームを再描画します。

`set_form_position`( | x, y)

  フォームの位置を設定します。

`freeze_form`( | )

  フォームを固定します。

`unfreeze_form`( | )

  固定したフォームの固定を解除します。

`activate_form`( | )

  フォームをアクティベートします。

`deactivate_form`( | )

  フォームをディアクティベートします。

`bgn_group`( | )

  新しいオブジェクトのグループを作ります；グループオブジェクトを返します。

`end_group`( | )

  現在のオブジェクトのグループを終了します。

`find_first`( | )

  フォームの中の最初のオブジェクトを見つけます。

`find_last`( | )

  フォームの中の最後のオブジェクトを見つけます。

`add_box`( | type, x, y, w, h, name)

  フォームにボックスオブジェクトを加えます。 特別な追加のメソッドはありません。

`add_text`( | type, x, y, w, h, name)

  フォームにテキストオブジェクトを加えます。 特別な追加のメソッドはありません。

`add_clock`( | type, x, y, w, h, name)

  フォームにクロックオブジェクトを加えます。
  メソッド： `get_clock()`。

`add_button`( | type, x, y, w, h, name)

  フォームにボタンオブジェクトを加えます。
  メソッド： `get_button()`、 `set_button()`。

`add_lightbutton`( | type, x, y, w, h, name)

  フォームにライトボタンオブジェクトを加えます。
  メソッド： `get_button()`、 `set_button()`。

`add_roundbutton`( | type, x, y, w, h, name)

  フォームにラウンドボタンオブジェクトを加えます。
  メソッド： `get_button()`、 `set_button()`。

`add_slider`( | type, x, y, w, h, name)

  フォームにスライダーオブジェクトを加えます。
  メソッド： `set_slider_value()`、 `get_slider_value()`、 `set_slider_bounds()`、 `get_slider_bounds()`、 `set_slider_return()`、 `set_slider_size()`、 `set_slider_precision()`、 `set_slider_step()`。

`add_valslider`( | type, x, y, w, h, name)

  フォームにバリュースライダーオブジェクトを加えます。
  メソッド： `set_slider_value()`、 `get_slider_value()`、 `set_slider_bounds()`、 `get_slider_bounds()`、 `set_slider_return()`、 `set_slider_size()`、 `set_slider_precision()`、 `set_slider_step()`。

`add_dial`( | type, x, y, w, h, name)

  フォームにダイアルオブジェクトを加えます。
  メソッド： `set_dial_value()`、 `get_dial_value()`、 `set_dial_bounds()`、 `get_dial_bounds()`。

`add_positioner`( | type, x, y, w, h, name)

  フォームに2次元ポジショナーオブジェクトを加えます。
  メソッド： `set_positioner_xvalue()`、 `set_positioner_yvalue()`、 `set_positioner_xbounds()`、 `set_positioner_ybounds()`、 `get_positioner_xvalue()`、 `get_positioner_yvalue()`、 `get_positioner_xbounds()`、 `get_positioner_ybounds()`。

`add_counter`( | type, x, y, w, h, name)

  フォームにカウンタオブジェクトを加えます。
  メソッド： `set_counter_value()`、 `get_counter_value()`、 `set_counter_bounds()`、 `set_counter_step()`, `set_counter_precision()`、 `set_counter_return()`。

`add_input`( | type, x, y, w, h, name)

  フォームにインプットオブジェクトを加えます。
  メソッド： `set_input()`、 `get_input()`、 `set_input_color()`、 `set_input_return()`。

`add_menu`( | type, x, y, w, h, name)

  フォームにメニューオブジェクトを加えます。
  メソッド： `set_menu()`、 `get_menu()`、 `addto_menu()`。

`add_choice`( | type, x, y, w, h, name)

  フォームにチョイスオブジェクトを加えます。
  メソッド： `set_choice()`、 `get_choice()`、 `clear_choice()`、 `addto_choice()`、 `replace_choice()`、 `delete_choice()`、 `get_choice_text()`、 `set_choice_fontsize()`、 `set_choice_fontstyle()`。

`add_browser`( | type, x, y, w, h, name)

  フォームにブラウザオブジェクトを加えます。
  メソッド： `set_browser_topline()`、 `clear_browser()`、 `add_browser_line()`、 `addto_browser()`、 `insert_browser_line()`、 `delete_browser_line()`、 `replace_browser_line()`、 `get_browser_line()`、 `load_browser()`、 `get_browser_maxline()`、 `select_browser_line()`、 `deselect_browser_line()`、 `deselect_browser()`、 `isselected_browser_line()`、 `get_browser()`、 `set_browser_fontsize()`、 `set_browser_fontstyle()`、 `set_browser_specialkey()`。

`add_timer`( | type, x, y, w, h, name)

  フォームにタイマーオブジェクトを加えます。
  メソッド： `set_timer()`、 `get_timer()`。

フォームオブジェクトには以下のデータ属性があります；FORMSドキュメントを 参照してください：

名称 | Cの型 | 意味
--- | --- | ---
`window` | int (read-only) | GLウィンドウのid
`w` | float | フォームの幅
`h` | float | フォームの高さ
`x` | float | フォーム左肩のx座標
`y` | float | フォーム左肩のy座標
`deactivated` | int | フォームがディアクティベートされているなら非ゼロ
`visible` | int | フォームが可視なら非ゼロ
`frozen` | int | フォームが固定されているなら非ゼロ
`doublebuf` | int | ダブルバッファリングがオンなら非ゼロ