''[[FrontPage]]''
* 複数のキャンバスを同時にスクロール [#a42d5045]
scrollbarのスクロールコマンド -command{}を横取りして複数のキャンバスに割当てる。~
サンプルコード上のコメントをもって解説に替える。~
** 制約事項 [#i8a979ce]
OSはWindows、Active_Tcl 8.5.5.0でぼちぼちと。~
~
~
ファイル名:test4.tcl
# 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 **********************************************# 複数キャンバスのスクロール #
*** 修正履歴 [#p18f0936]
~
*** 課題 [#qe42e823]
かなり強引だけど、スクロールに関してはこれで事足りてる。~
落とし穴は無いか探している状態。~
-備考~
~
*** 参考ページ [#qcdeab74]
[Tcl/Tk めも: http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/tcltk_primer/tcltk_memo.html]