選択領域の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 件のコメント:
コメントを投稿