From: Takaaki Tateishi Date: 2000-11-13T00:37:46+09:00 Subject: [ruby-list:25900] Re: validatecommand etc. of TkEntry --Multipart_Mon_Nov_13_00:36:33_2000-1 Content-Type: text/plain; charset=ISO-2022-JP 立石です. At Sun, 12 Nov 2000 10:40:45 +0900, Masahiro SATO wrote: > Tcl/Tk の entry ウィジェットの -validatecommand や > -invalidcommand を Ruby/Tk に実装したいのですが, どの > ようにすればいいでしょうか? 添付ファイルのような感じでどうでしょう. ruby 1.6.2 (2000-11-10) [i686-linux] からのパッチとなっています. また,僕がテストに用いたスクリプトも添付しておきます. -- Takaaki Tateishi --Multipart_Mon_Nov_13_00:36:33_2000-1 Content-Type: application/octet-stream; type=patch Content-Disposition: attachment; filename="tkentry.rb.diff" Content-Transfer-Encoding: 7bit Index: tkentry.rb =================================================================== RCS file: /home/cvs/ruby/ext/tk/lib/tkentry.rb,v retrieving revision 1.6 diff -u -r1.6 tkentry.rb --- tkentry.rb 2000/06/12 07:48:28 1.6 +++ tkentry.rb 2000/11/12 15:32:33 @@ -59,13 +59,30 @@ tk_send 'selection', 'to', index end - def validate - if tk_send('validate') == '0' - false - else - true + def validate(args=nil) + if args + configure 'validate', args + else + if tk_send('validate') == '0' + false + else + true + end end end + + def invalidcommand(cmd=Proc.new, args=nil) + cmd = install_bind(cmd, args) + configure 'validatecommand', cmd + end + + def validatecommand(cmd=Proc.new, args=nil) + cmd = install_bind(cmd, args) + configure 'validatecommand', cmd + end + + alias invcmd invalidcommand + alias vcmd validatecommand def value tk_send 'get' --Multipart_Mon_Nov_13_00:36:33_2000-1 Content-Type: application/octet-stream Content-Disposition: attachment; filename="test.rb" Content-Transfer-Encoding: 7bit require 'tk' $e1 = TkEntry.new(nil, 'width' => 20).pack $e2 = TkEntry.new(nil, 'width' => 20, 'validate' => 'focusin').pack $e2.validatecommand(proc{|v| $e2.insert('end',"hoge #{v}"); '1'}, '%V') $e1.bind('FocusOut', proc{$e1.delete(0,'end')}) $e1.bind('FocusIn', proc{$e1.insert('end','focus')}) Tk.mainloop --Multipart_Mon_Nov_13_00:36:33_2000-1--