Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Phi::Splitter

Splitter は,フォームのクライアント領域をサイズ変更可能なペインに分割します。

隣り合って配置された画像部品の境界をマウスで移動できるようにするための部品です。

* 動かしすぎると見えなくなってしまうので、「splitter.auto_snap = false」をセットしておくとよいでしょう。

* また、Apolloにスプリッタの場所を教えるために、leftやtopを指定する必要があります。(Delphiでは作成順できまるが、Apolloではうまくいかないため)。

下の絵の「edit」と「memo」の境にある線に隠れているのがスプリッタです。ここをマウスでドラッグすると、上下(場合によっては左右)のコントロールの大きさと位置を変更することができます。

1.jpg
require 'phi'
form = Phi::Form.new
  # フォームにコントロールとスプリッタを貼る
memo     = Phi::Memo.new     form, :memo, "memo"
edit     = Phi::Edit.new     form, :edit, "edit"
splitter = Phi::Splitter.new form
  # 整列させる。
  # これだけだとどちらが本当のTOPか分からない。
edit.align     = Phi::AL_TOP
splitter.align = Phi::AL_TOP
memo.align     = Phi::AL_CLIENT
  # 位置関係を指定する
  # どちらが本当のTOPを指定する。
splitter.top = edit.bottom
  # 動かしすぎたときに動けなくなるのを防ぐ
splitter.auto_snap = false
splitter.min_size  = 1
form.show
Phi.mainloop

例2:左右分割+上下分割+on_movedイベント

2.jpg
require 'phi'
form = Phi::Form.new
  #
  # 左右分割のスプリッタ
  #
tree_view1 = Phi::TreeView.new form
panel1     = Phi::Panel.new    form
splitter1  = Phi::Splitter.new form
  #
tree_view1.align = Phi::AL_LEFT
splitter1.align  = Phi::AL_LEFT
panel1.align     = Phi::AL_CLIENT
  #
splitter1.left      = tree_view1.right
splitter1.auto_snap = false
splitter1.min_size  = 1
  #
  # 右の領域(panel1)を上下に分割する。
  #
panel2    = Phi::Panel.new    panel1
splitter2 = Phi::Splitter.new panel1
memo1     = Phi::Memo.new     panel1
  #
panel2.align    = Phi::AL_TOP
splitter2.align = Phi::AL_TOP
memo1.align     = Phi::AL_CLIENT
  #
splitter2.top       = panel2.bottom
splitter2.auto_snap = false
splitter2.min_size  = 1
  #
  # スプリッタをプログラム的に動かしたいときには
  # 規準となるコントロールの大きさを変える。
  #
button1 = Phi::Button.new panel2 , :button1 , "<=="
button2 = Phi::Button.new panel2 , :button2 , "==>"
button1.on_click= proc{ tree_view1.width -= 1 }
button2.on_click= proc{ tree_view1.width += 1 }
  # これ(↓)でも良かったりして・・
#button1 = Phi::Button.new panel2 , :button1 , "<==" , proc{ tree_view1.width -= 1 }
#button2 = Phi::Button.new panel2 , :button2 , "==>" , proc{ tree_view1.width += 1 }
  #
  # ボタンの位置はスプリッタの位置に依存する。
  #
splitter2.top  = panel2.bottom
button2.left   = panel2.width / 2
  #
  # スプリッタの移動で配置を変えたいときは
  # Splitter#on_moved を使う。
  #
splitter1.on_moved=proc{
  splitter2.top  = panel2.bottom
  button2.left   = panel2.width / 2
}

form.show
Phi.mainloop

メソッド

require "phi"
require "methods_for_wiki"
puts Phi::Splitter.methods_for_wiki

_dump => Phi::Component#_dump

action => Phi::Control#action

action= => Phi::Control#action=

align => Phi::Control#align

align= => Phi::Control#align=

auto_snap

auto_snap=

auto_snap?

auto_snap プロパティは,スプリッタを使って隣接したオブジェクトを min_size プロパティ未満にするときに,そのオブジェクトが 0 にサイズ変更されるかどうかを指定します。

auto_snap プロパティを false に設定すると,ユーザーが隣接したオブジェクトを min_size プロパティ未満にしようとしたときに,スプリッタがそのオブジェクトを 0 にサイズ変更するのを防ぐことができます。auto_snap プロパティが false のとき,こうしたサイズ変更は簡単にブロックされ,隣接したオブジェクトを min_size プロパティのままにします。auto_snap プロパティのデフォルト値は true です。

これをfalseにしないと、動かしすぎのときに、隣のコントロールのサイズが0になって、スプリッタが動けなくなってしまうようです。(なんで、デフォルトがtrueなのだろうか?)

begin_drag => Phi::Control#begin_drag

beveled

beveled=

beveled?

bottom => Phi::Control#bottom

bottom= => Phi::Control#bottom=

bounds_rect => Phi::Control#bounds_rect

bounds_rect= => Phi::Control#bounds_rect=

bring_to_front => Phi::Control#bring_to_front

client_height => Phi::Control#client_height

client_height= => Phi::Control#client_height=

client_origin => Phi::Control#client_origin

client_rect => Phi::Control#client_rect

client_to_parent => Phi::Control#client_to_parent

client_to_screen => Phi::Control#client_to_screen

client_width => Phi::Control#client_width

client_width= => Phi::Control#client_width=

color

color=

component_count => Phi::Component#component_count

components => Phi::Component#components

constraints => Phi::Control#constraints

constraints= => Phi::Control#constraints=

control_state => Phi::Control#control_state

control_state= => Phi::Control#control_state=

control_style => Phi::Control#control_style

control_style= => Phi::Control#control_style=

cursor => Phi::Control#cursor

cursor= => Phi::Control#cursor=

dragging => Phi::Control#dragging

draw_text_bi_di_mode_flags => Phi::Control#draw_text_bi_di_mode_flags

draw_text_bi_di_mode_flags_reading_only => Phi::Control#draw_text_bi_di_mode_flags_reading_only

enabled => Phi::Control#enabled

enabled= => Phi::Control#enabled=

enabled? => Phi::Control#enabled?

end_drag => Phi::Control#end_drag

event_handle => Phi::Persistent#event_handle

extend => Phi::Persistent#extend

floating => Phi::Control#floating

floating? => Phi::Control#floating?

floating_dock_site_class= => Phi::Control#floating_dock_site_class=

font => Phi::Control#font

font= => Phi::Control#font=

handle => Phi::Control#handle

has_parent => Phi::Control#has_parent

height => Phi::Control#height

height= => Phi::Control#height=

help_context => Phi::Control#help_context

help_context= => Phi::Control#help_context=

help_keyword => Phi::Control#help_keyword

help_keyword= => Phi::Control#help_keyword=

help_type => Phi::Control#help_type

help_type= => Phi::Control#help_type=

hide => Phi::Control#hide

hint => Phi::Control#hint

hint= => Phi::Control#hint=

host_dock_site => Phi::Control#host_dock_site

host_dock_site= => Phi::Control#host_dock_site=

initiate_action => Phi::Control#initiate_action

invalidate => Phi::Control#invalidate

is_right_to_left => Phi::Control#is_right_to_left

left => Phi::Control#left

left= => Phi::Control#left=

lr_dock_width => Phi::Control#lr_dock_width

lr_dock_width= => Phi::Control#lr_dock_width=

min_size

min_size=

min_size プロパティは,スプリッタの両側のペインの取り得る最小サイズをピクセル単位で指定します。

* スプリッタの両側の最少サイズを指定するプロパティ。auto_snap=falseのときに有効となる。

min_size プロパティを設定すると,その隣接するコントロールをサイズ変更するときにスプリッタが残さなければならない最小サイズを提供できます。たとえば,align プロパティが AL_LEFT または AL_RIGHT の場合(スプリッタの左右にベベルが付きます)や AL_TOP または AL_BOTTOM の場合(スプリッタの上下にベベルが付きます),スプリッタは領域の大きさを,min_size ピクセルより小さい値を使って変更することはできません。min_size プロパティのデフォルト値は 30 です。

注意 min_size プロパティには,親のクライアント幅の半分より小さい値を設定してください。スプリッタの親のクライアント幅の半分の値を設定すると,スプリッタは移動できなくなります。左右どちらかのペインの大きさが必ず min_size プロパティより小さくなるからです。

name => Phi::Control#name

name= => Phi::Control#name=

on_can_resize

on_can_resize=

on_context_popup => Phi::Control#on_context_popup

on_context_popup= => Phi::Control#on_context_popup=

on_moved

on_moved=

on_paint

on_paint=

parent => Phi::Control#parent

parent= => Phi::Control#parent=

parent_color

parent_color=

parent_color?

parent_form => Phi::Control#parent_form

parent_to_client => Phi::Control#parent_to_client

perform => Phi::Control#perform

prop_info => Phi::Component#prop_info

rect => Phi::Control#rect

rect= => Phi::Control#rect=

refresh => Phi::Control#refresh

repaint => Phi::Control#repaint

resize_style

resize_style=

right => Phi::Control#right

right= => Phi::Control#right=

right_to_left? => Phi::Control#right_to_left?

screen_to_client => Phi::Control#screen_to_client

send_to_back => Phi::Control#send_to_back

set_bounds => Phi::Control#set_bounds

show => Phi::Control#show

show_hint => Phi::Control#show_hint

show_hint= => Phi::Control#show_hint=

show_hint? => Phi::Control#show_hint?

tb_dock_height => Phi::Control#tb_dock_height

tb_dock_height= => Phi::Control#tb_dock_height=

top => Phi::Control#top

top= => Phi::Control#top=

undock_height => Phi::Control#undock_height

undock_height= => Phi::Control#undock_height=

undock_width => Phi::Control#undock_width

undock_width= => Phi::Control#undock_width=

update => Phi::Control#update

use_right_to_left_reading => Phi::Control#use_right_to_left_reading

use_right_to_left_scroll_bar => Phi::Control#use_right_to_left_scroll_bar

visible => Phi::Control#visible

visible= => Phi::Control#visible=

visible? => Phi::Control#visible?

width => Phi::Control#width

width= => Phi::Control#width=

write_res_file => Phi::Component#write_res_file

Last modified:2006/10/17 11:05:32
Keyword(s):
References:[Phi-Classes] [Phi-Constants] [image_of_controls]