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

RDB::DBGrid

Phi::DBGrid

データベース対応のグリッド(格子状にデータを並べて表示、編集する画像部品)です。

super class

Phi::CustomGrid

class methods

new : DBGrid

instance methods

mouse_coord(x,y)

画面座標値(通常はマウスの位置)を x,y で受け取って、その点を含むグリッドのセルの行(col)と列(row)を配列にして返す。

properties

event handlers

on_draw_column_cell(rect, col, column, state)

draw_column_cell event は, grid が cell を描画しなければならないときに発生します。

rect
Phi::Rect: cell の canvas 上の位置
col
Fixnum: 列の columns 配列におけるインデックス
column
Column: cell の表示属性と項目 binding を表す Column Object
state
Fixnum: RDB_const?#GridDrawState?
  • cell に入力 focus があるか
  • cell が選択されているか
  • cell が列 header などの固定 ( データ以外 ) cell か

cell data にカスタマイズされた描画方法を提供するために on_draw_column_cell event handler を作成してください。 DBGrid#canvas のメソッドを使って cell に描画できます。

on_draw_column_cell event handler は, DBGrid#default_draw_column_cell を呼び出して, cell に data を書き込むよう grid に指示することができます。また, DBGrid#default_draw_column_cell を強化して,選択状態と focus を視覚的に示すことができます。 DBGrid#default_drawing が true の場合, draw_column_cell event 発生前に data はすでに cell に描画されており,また draw_column_cell event 発生後には選択された cell に長方形の focus 領域が描画されます。

操作方法

(1)グリッドで[ins]キーを押すと挿入行が出てきます。また、グリッドの最下行で[↓]キーを押したときにも挿入行が出てきます。挿入を禁止したい場合には before_insert のハンドラに Phi.abort を入れます。挿入時にデータをセットしたい場合には after_insert のハンドラでデータを入れれば OK です。

(2)グリッドが編集可能なときに、セルで[F02]キーを押すと編集状態になります。文字キーを押しただけでも前のデータが消えてその文字が入ります。編集をセルへの入力をキャンセルするには[esc]キーでOKです。グリッド全体を編集禁止にするには・・、特定の桁を編集禁止にするには・・、編集後に入力データを点検するには・・、点検結果が不正な場合には・・、・・。

(3)グリッドで最後の行に移動したい場合には Ctrl+PgDn 、最初の行に移動したい場合には Ctrl+PgUp、行の先頭(左端)のセルに移動するには[Home]キー、行の右端のセルに移動したい場合には、[End]キー、などなど、・・。(ぼちぼち書こう)。

メソッド一覧


require "phi"
require "rdb/rdb"
require "methods_for_wiki"
puts RDB::DBGrid.methods_for_wiki

_dump => Phi::Component#_dump

action => Phi::Control#action

action= => Phi::Control#action=

action_change => Phi::WinControl#action_change

adjust_client_rect => Phi::WinControl#adjust_client_rect

adjust_size => Phi::WinControl#adjust_size

adjusted_client_rect => Phi::WinControl#adjusted_client_rect

align => Phi::Control#align

align= => Phi::Control#align=

align_controls => Phi::WinControl#align_controls

align_disabled => Phi::WinControl#align_disabled

align_disabled? => Phi::WinControl#align_disabled?

anchors

anchors=

assign_to => Phi::WinControl#assign_to

begin_drag => Phi::Control#begin_drag

bevel_width => Phi::WinControl#bevel_width

bevel_width= => Phi::WinControl#bevel_width=

bi_di_mode

bi_di_mode=

border_style

border_style=

Phi-BorderStyle

border_width => Phi::WinControl#border_width

border_width= => Phi::WinControl#border_width=

bottom => Phi::Control#bottom

bottom= => Phi::Control#bottom=

bring_to_front => Phi::Control#bring_to_front

can_auto_size => Phi::WinControl#can_auto_size

can_focus => Phi::WinControl#can_focus

can_resize => Phi::WinControl#can_resize

canvas

cell_rect ( row, col ) : Phi::Rect => Phi::CustomGrid#cell_rect

cell_rect メソッドは,セルの画面座標値を返します。

change_scale => Phi::WinControl#change_scale

client_origin => Phi::WinControl#client_origin

client_rect => Phi::WinControl#client_rect

client_to_screen => Phi::Control#client_to_screen

color

color=

columns

columns=

グリッドの列を制御するためのRDB::DBGridColumnsを返す。

* RDB::DBGridColumns?RDB::Columnのコンテナ。

component_count => Phi::Component#component_count

components => Phi::Component#components

constrained_resize => Phi::WinControl#constrained_resize

constraints

constraints=

contains_control => Phi::WinControl#contains_control

control_at => Phi::WinControl#control_at

control_at_pos => Phi::WinControl#control_at_pos

control_count => Phi::WinControl#control_count

control_extents => Phi::WinControl#control_extents

control_state => Phi::Control#control_state

control_state= => Phi::Control#control_state=

control_style => Phi::Control#control_style

control_style= => Phi::Control#control_style=

controls => Phi::WinControl#controls

controls_aligned => Phi::WinControl#controls_aligned

create_handle => Phi::WinControl#create_handle

create_wnd => Phi::WinControl#create_wnd

ctl3d => Phi::WinControl#ctl3d

ctl3d= => Phi::WinControl#ctl3d=

ctl3d? => Phi::WinControl#ctl3d?

cursor => Phi::Control#cursor

cursor= => Phi::Control#cursor=

custom_align_insert_before => Phi::WinControl#custom_align_insert_before

data_source

data_source=

表示するデータを示すデータソース(RDB::DataSource)。

def_wnd_proc= => Phi::WinControl#def_wnd_proc=

default_drawing

default_drawing=

default_drawing?

define_properties => Phi::WinControl#define_properties

destroy_handle => Phi::WinControl#destroy_handle

destroy_window_handle => Phi::WinControl#destroy_window_handle

destroy_wnd => Phi::WinControl#destroy_wnd

device_context => Phi::WinControl#device_context

disable_align => Phi::WinControl#disable_align

dock_client_count => Phi::WinControl#dock_client_count

dock_drop => Phi::WinControl#dock_drop

dock_site => Phi::WinControl#dock_site

dock_site= => Phi::WinControl#dock_site=

dock_site? => Phi::WinControl#dock_site?

double_buffered => Phi::WinControl#double_buffered

double_buffered= => Phi::WinControl#double_buffered=

drag_cursor

drag_cursor=

drag_kind

drag_kind=

drag_mode

drag_mode=

enable_align => Phi::WinControl#enable_align

enabled

enabled=

enabled?

event_handle

extend => Phi::Persistent#extend

field_count

fields

find_child_control => Phi::WinControl#find_child_control

find_next_control => Phi::WinControl#find_next_control

fixed_color

fixed_color=

fixup_tab_list => Phi::WinControl#fixup_tab_list

flip_children => Phi::WinControl#flip_children

focused => Phi::WinControl#focused

focused? => Phi::WinControl#focused?

font

font=

handle => Phi::Control#handle

handle_allocated => Phi::WinControl#handle_allocated

handle_needed => Phi::WinControl#handle_needed

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=

ime_mode => Phi::WinControl#ime_mode

ime_mode= => Phi::WinControl#ime_mode=

ime_name => Phi::WinControl#ime_name

ime_name= => Phi::WinControl#ime_name=

insert_control => Phi::WinControl#insert_control

invalidate => Phi::Control#invalidate

key_press => Phi::WinControl#key_press

left => Phi::Control#left

left= => Phi::Control#left=

left_col

left_col=

グリッドで表示されている一番左のカラム番号。

グリッドの画像部品の幅よりもグリッドの本体の幅のほうが大きい場合に、カラムを移動すると、横にスクロールする。横にスクロールするということはグリッドで表示されている一番左のカラム番号が変わるということ。

最初の状態では left_col は 1 を返すが、横にスクロールしたときには 2 以上を返すことになる。

left_col= に設定すれば、強制的に横スクロールの状態にすることができる。

require "phi"
require "rdb/rdb"
require "dir_to_dataset"
form = Phi::Form.new
grid = RDB::DBGrid.new form
grid.align = Phi::AL_CLIENT
grid.data_source = RDB::DataSource.new dir_to_dataset
grid.on_col_enter = proc{|*args| p grid.left_col }
form.show
Phi.mainloop

mouse_coord => Phi::CustomGrid#mouse_coord

name => Phi::Control#name

name= => Phi::Control#name=

on_cell_click

on_cell_click=

on_col_enter

on_col_enter=

on_col_exit

on_col_exit=

on_column_moved

on_column_moved= proc{| sender, from_index, to_index | .. }

on_column_moved イベントは,ユーザーがマウスを使って列を移動したときに発生します。

列を移動するというのは、マウスでタイトル欄をドラッグして列の順番を変更したときのことを言います。(マウスでタイトル欄の区切りを移動すると列の幅が変わるが、その時には発生しない)。

二つめの列(列番号1)を右に移動して3つ目の列(列番号2)にすると、from_index は 1 、to_index は 2 となります。

* このタイミングで変更をファイルに保存するには・・

on_context_popup => Phi::Control#on_context_popup

on_context_popup= => Phi::Control#on_context_popup=

on_dbl_click

on_dbl_click=

on_drag_drop

on_drag_drop=

on_drag_over

on_drag_over=

on_draw_column_cell

on_draw_column_cell= proc{| sender, rect, data_col, column, states | .. }

draw_column_cell イベントはグリッドがセルを描画するときにセルごとに呼ばれます。(1画面に大量のセルがあれば大量に発生します)。

sender
イベントが発生した DBGrid オブジェクト
rect
当該セルの sender.canvas 上での位置を示すPhi::Rectオブジェクト
col
当該セルの列の sender.columns 配列におけるインデックス
column
当該セルの列の RDB::Column オブジェクト
states
当該セルの状態を示す RDB-GridDrawState の配列
  • Phi::GD_FOCUSED : Fixnum = 1 .. 当該セルに入力フォーカス?があるか
  • Phi::GD_SELECTED : Fixnum = 0 .. 当該セルが選択されているか
  • Phi::GD_FIXED : Fixnum = 2 .. 当該セルがヘッダなどの固定セルか ( データ以外か)

DBGrid は on_draw_column_cell ハンドラがなければデフォルトの描画を行います。デフォルトの描画と異なった描画をしたい場合には on_draw_column_cell ハンドラを作成します。

ハンドラの中で RDB::DBGrid#canvasPhi::Canvas)のメソッドを使って セルに描画します。

ハンドラの中で RDB::DBGrid#default_draw_column_cell メソッドを呼び出せばデフォルトの描画を行うことができます。その時に canvas.brush.color などを変更しておけば、デフォルトの描画とは異なった見栄えにすることも出来ます。

RDB::DBGrid#default_drawing プロパティが true の場合、 draw_column_cell イベントの発生前にデータはすでに描画された状態で呼ばれます。従って、一瞬ちらつく可能性があります。また draw_column_cell イベントの終了後には選択されたセルに長方形のフォーカス領域が描画されます。

RDB::DBGrid#default_drawing プロパティが false の場合にはすべての描画処理をdraw_column_cell イベントで行わなければなりません。

require 'phi'
require "rdb/rdb"
require "dir_to_dataset"
form = Phi::Form.new
grid = RDB::DBGrid.new form
grid.align = Phi::AL_CLIENT
grid.data_source = RDB::DataSource.new dir_to_dataset
#-- 全体の色はライム(緑)
grid.color = Phi::CL_LIME
#-- size の列はオリーブ
grid.columns[1].color = Phi::CL_OLIVE
#-- attr の行の値が 16 なら黄色で、<dir> と描画する。
#-- ただし、フォーカスがある場合には通常通りに描画する。
grid.on_draw_column_cell = proc{|sender,rect,col,column,states|
  canvas = sender.canvas
  value  = column.field.value
  if (col == 2) && (value == 16) && !(states.include? Phi::GD_FOCUSED)
     canvas.brush.color = Phi::CL_YELLOW
     canvas.text_rect( rect, rect.left, rect.top, "<dir>" )
  end
}
form.show
Phi.mainloop
1.jpg

on_draw_data_cell

on_draw_data_cell=

この OnDrawDataCell? イベントハンドラを作成しないでください。このイベントハンドラは旧式であり,下位互換性を保つために用意されています。かわりに OnDrawColumnCell? イベントハンドラを作成してください。

* 反応しないみたい。削除できないのかな?

on_edit_button_click

on_edit_button_click=

on_edit_button_click イベントは,グリッド列内の省略記号ボタンが押されたとき発生します。

省略記号を出すには、表示を出したい列の RDB::Column#button_style を RDB::CBS_ELLIPSIS にしておく。そうすると、そのセルを編集状態にしたときに出てくる。

イベントハンドラには sender(RDB::DBGrid オブジェクト) しか送られないので、値を設定しなければならない Field コンポーネントにアクセスするには,sender.selected_field プロパティ(RDB::DBGrid#selected_field)を使ってください。

require 'phi'
require "rdb/rdb"
require "dir_to_dataset"
form = Phi::Form.new
grid = RDB::DBGrid.new form
grid.align = Phi::AL_CLIENT
grid.data_source = RDB::DataSource.new dir_to_dataset
grid.columns[3].button_style = RDB::CBS_ELLIPSIS
grid.on_edit_button_click = proc{|*args|
 p args #=> [#<RDB::DBGrid:0x1409590>]
}
form.show
Phi.mainloop
2.png

on_end_dock

on_end_dock=

on_end_drag

on_end_drag=

on_enter

on_enter=

on_exit

on_exit=

on_key_down

on_key_down=

on_key_press

on_key_press=

on_key_up

on_key_up=

on_mouse_down

on_mouse_down=

on_mouse_move

on_mouse_move=

on_mouse_up

on_mouse_up=

on_mouse_wheel

on_mouse_wheel=

on_mouse_wheel_down

on_mouse_wheel_down=

on_mouse_wheel_up

on_mouse_wheel_up=

on_start_dock

on_start_dock=

on_start_drag

on_start_drag=

on_title_click

on_title_click=

options

options=

paint_controls => Phi::WinControl#paint_controls

paint_window => Phi::WinControl#paint_window

palette_changed => Phi::WinControl#palette_changed

parent => Phi::Control#parent

parent= => Phi::Control#parent=

parent_bi_di_mode

parent_bi_di_mode=

parent_bi_di_mode?

parent_color

parent_color=

parent_color?

parent_ctl3d => Phi::WinControl#parent_ctl3d

parent_ctl3d= => Phi::WinControl#parent_ctl3d=

parent_ctl3d? => Phi::WinControl#parent_ctl3d?

parent_font

parent_font=

parent_font?

parent_form => Phi::Control#parent_form

parent_handle => Phi::WinControl#parent_handle

parent_show_hint

parent_show_hint=

parent_show_hint?

parent_window => Phi::WinControl#parent_window

parent_window= => Phi::WinControl#parent_window=

perform => Phi::Control#perform

popup_menu

popup_menu=

prop_info => Phi::Component#prop_info

read_only

read_only=

read_only?

read_state => Phi::WinControl#read_state

realign => Phi::WinControl#realign

recreate_wnd => Phi::WinControl#recreate_wnd

rect => Phi::Control#rect

rect= => Phi::Control#rect=

refresh => Phi::Control#refresh

reload_docked_control => Phi::WinControl#reload_docked_control

remove_control => Phi::WinControl#remove_control

repaint => Phi::Control#repaint

reset_ime => Phi::WinControl#reset_ime

right => Phi::Control#right

right= => Phi::Control#right=

scale_by => Phi::WinControl#scale_by

scale_controls => Phi::WinControl#scale_controls

screen_to_client => Phi::Control#screen_to_client

scroll_bars

scroll_bars=

scroll_by => Phi::WinControl#scroll_by

select_first => Phi::WinControl#select_first

select_next => Phi::WinControl#select_next

selected_field

selected_index

selected_index=

send_to_back => Phi::Control#send_to_back

set_bounds => Phi::Control#set_bounds

set_child_order => Phi::WinControl#set_child_order

set_focus => Phi::WinControl#set_focus

set_ime => Phi::WinControl#set_ime

set_z_order => Phi::WinControl#set_z_order

show => Phi::Control#show

show_control => Phi::WinControl#show_control

show_hint

show_hint=

show_hint?

showing => Phi::WinControl#showing

showing? => Phi::WinControl#showing?

site_info => Phi::WinControl#site_info

stop_align => Phi::WinControl#stop_align

tab_order

tab_order=

tab_order_list => Phi::WinControl#tab_order_list

tab_stop => Phi::WinControl#tab_stop

tab_stop= => Phi::WinControl#tab_stop=

tab_stop? => Phi::WinControl#tab_stop?

title_font

title_font=

top => Phi::Control#top

top= => Phi::Control#top=

top_parent_handle => Phi::WinControl#top_parent_handle

update => Phi::Control#update

update_control_state => Phi::WinControl#update_control_state

use_dock_manager => Phi::WinControl#use_dock_manager

use_dock_manager= => Phi::WinControl#use_dock_manager=

use_dock_manager? => Phi::WinControl#use_dock_manager?

visible

visible=

visible?

visible_dock_client_count => Phi::WinControl#visible_dock_client_count

width => Phi::Control#width

width= => Phi::Control#width=

window_handle => Phi::WinControl#window_handle

window_handle= => Phi::WinControl#window_handle=

write_res_file => Phi::Component#write_res_file


ご意見・ご質問(comment plugin is disabled).


Last modified:2006/10/23 17:20:44
Keyword(s):
References:[Phi::StringGrid] [RDB::ClientDataSet] [RDB::Column] [ext-rdb-RDB-constants] [ext-rdb-index] [カーソル]