Gtk::Entry#set_max_length() で Entry に入力できる最大
文字数を指定できますが、これは文字数であってバイト長ではありません。
たとえば5文字に制限した場合、"いろはにほ" の 10バイト入力できてし
まいます。文字数でなくてバイト数で制限を掛けたい時もあります。とい
うことで、バイト数の制限を掛ける set_max_byte() です。
このモジュールを使用するためには Ruby/Gtk に insert_text シグナル
を処理するためのパッチと、signal_handler_block() を追
加するパッチを適用する必要があります。
このサンプルでは文字を入力してもカーソルが移動しません。 ruby-gtk-0.23 のリリースに合わせ近々変更予定。
…のつもりでしたが、今の Ruby/Gtk の仕組みではできません。そのうち できるようになるでしょう…。
module ByteEntry
def set_max_byte(max)
max_byte = max
handler_id = signal_connect("insert_text") do |a|
cur_len = get_text.length
if cur_len < max_byte
w, s, p = a
if cur_len + s.length > max_byte
len = max_byte - cur_len
ss = ""
s.scan(/./) do |a|
break if ss.length + a.length > len
ss << a
end
s = ss
end
signal_handler_block(handler_id)
insert_text(s, p[0])
signal_handler_unblock(handler_id)
end
signal_emit_stop("insert_text")
end
end
end
使用例
class MyEntry < Gtk::Entry include ByteEntry end w = Gtk::Window::new.show h = Gtk::HBox::new.show e = MyEntry::new.show e.set_max_byte(7) h.pack_start e, false, false w.add h Gtk::main
Last modified: Sat Sep 15 04:12:53 JST 2001