複数のキャンバスを同時にスクロール †scrollbarのスクロールコマンド -command{}を横取りして複数のキャンバスに割当てる。 制約事項 †OSはWindows、Active_Tcl 8.5.5.0でぼちぼちと。 # Generate Canvases ********************************************# キャンバスの生成 # canvas .c -background white -width 486 -height 121 \ -scrollregion {5 2 5475 444} \ -xscrollcommand {.xsbar set} -yscrollcommand {.ysbar set} ;# キャンバスの定義その1 # # .c configure -xscrollincrement 0.5i -yscrollincrement 0.05i ;# スクロールの刻み幅 *なんか表示が微妙になる* # ;# # canvas .keyC -background white -width 50 -height 121 \ -scrollregion {5 2 55 444} -yscrollcommand {.ysbar set} ;# キャンバスの定義その2 # # .keyC configure -xscrollincrement 0.5i -yscrollincrement 0.05i ;# スクロールの刻み幅 *なんか表示が微妙になる* # ;# # .c create line 5 10 45 441 -fill black -width 1 ;# 確認用 # .keyC create line 5 10 45 441 -fill black -width 1 ;# 確認用 # ;# # scrollbar .xsbar -orient horizontal -command {.c xview} ;# 水平方向スクロールバーの宣言 # scrollbar .ysbar -orient vertical -command {scrollMultiple .c .keyC} ;# 垂直方向スクロールバーの宣言 *横流し現場* # ;# *スクロールバーの操作時にプロシージャを呼び出す* # ;# # grid .keyC .c .ysbar -sticky news ;# グリッダーによるwigdetの配置 # grid .xsbar -row 1 -columnspan 3 -sticky ew ;# グリッダーによる水平方向スクロールバーの配置 # #/Generate Canvases ********************************************# キャンバスの生成 # # Scroll Multiple **********************************************# 複数キャンバスのスクロール # proc scrollMultiple { c keyC args } { ;# *可変長引数(args)の中身を覗くと納得します* # set cnt 0 ;# 引数個数カウンタ # foreach elem $args { ;# 可変長引数を分割して配列にセット # set elemA($cnt) $elem ;# # incr cnt ;# 引数個数カウンタをインクリメント # } ;# # ;# # if { 3 == $cnt } { ;# 可変長引数の数が3のとき # $c yview $elemA(0) $elemA(1) $elemA(2) ;# キャンバスその1のスクロール # $keyC yview $elemA(0) $elemA(1) $elemA(2) ;# キャンバスその2のスクロール # } elseif { 2 == $cnt } { ;# 可変長引数の数が2のとき # $c yview $elemA(0) $elemA(1) ;# キャンバスその1のスクロール # $keyC yview $elemA(0) $elemA(1) ;# キャンバスその2のスクロール # } else { ;# それ以外のときはよく分からんから処理中断しとく # return -1 ;# *スクロールコマンドのオプションは原則的に # } ;# 3か2しかないと思っています* # # $keyC yview $args ;# オプションNG # } ;# # #/Scroll Multiple **********************************************# 複数キャンバスのスクロール # 修正履歴 †課題 †かなり強引だけど、スクロールに関してはこれで事足りてる。
参考ページ †[Tcl/Tk めも: http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/tcltk_primer/tcltk_memo.html] |