2012年10月21日日曜日

Ruby/Tkのテキストを強調表示

最近Ruby/Tkを使ってたんですがイイですね。ササッと書ける。
ただテキストウィジェットで強調表示させるのに戸惑ったのでメモ。
選択領域のTkTextTagSelとタグ機能のTkTextTagを使い、Press/Releaseにバインドするのがポイント
実行例

$txt = TkText.new()                         #テキストウィジェットの作成
$checked_tag = TkTextTag.new($txt)          #タグの準備
$checked_tag.configure('background','red')  #強調する色
#すでに強調されている部分を、クリックされた時の動作
$checked_tag.bind('ButtonPress',proc{
#クリックされた場所
                     i = $txt.index(TkTextMarkInsert.new($txt))
                    ft = $checked_tag.prevrange(i.first)
#クリックされた所は強調されているか? 
                    if(ft.first.nil?) 
#強調が無い時は何もしない
                    elsif(i <= ft.last)
#クリックされた領域の強調を解除 
                       $checked_tag.remove(ft.first,ft.last)
                    end
                  })
sel = nil                                   #選択領域
$txt.bind('ButtonPress-1', proc{ 
            sel = TkTextTagSel.new($txt)
            sel.configure('background','white')
         })
$txt.bind('ButtonRelease-1', proc{ 
            begin
#選択領域にタグを割り当て 
               $txt.tag_add($checked_tag,sel.first,sel.last)
            rescue
            end
          })



Ruby/Tkのリファレンスもあるけど説明がほとんど無いんで、Tcl/TkやPerl/Tkのページを見る必要があります.
M.HiroiさんのPerl/TkのページTcl/Tkのページが一番参考になりました。

0 件のコメント:

コメントを投稿