''[[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]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS