cscroll.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # cscroll.tcl --
  2. #
  3. # This demonstration script creates a simple canvas that can be
  4. # scrolled in two dimensions.
  5. #
  6. # RCS: @(#) $Id: cscroll.tcl,v 1.3.4.1 2005/12/13 03:44:42 das Exp $
  7. if {![info exists widgetDemo]} {
  8.     error "This script should be run from the "widget" demo."
  9. }
  10. set w .cscroll
  11. catch {destroy $w}
  12. toplevel $w
  13. wm title $w "Scrollable Canvas Demonstration"
  14. wm iconname $w "cscroll"
  15. positionWindow $w
  16. set c $w.c
  17. label $w.msg -font $font -wraplength 4i -justify left -text "This window displays a canvas widget that can be scrolled either using the scrollbars or by dragging with button 2 in the canvas.  If you click button 1 on one of the rectangles, its indices will be printed on stdout."
  18. pack $w.msg -side top
  19. frame $w.buttons
  20. pack $w.buttons -side bottom -fill x -pady 2m
  21. button $w.buttons.dismiss -text Dismiss -command "destroy $w"
  22. button $w.buttons.code -text "See Code" -command "showCode $w"
  23. pack $w.buttons.dismiss $w.buttons.code -side left -expand 1
  24. frame $w.grid
  25. scrollbar $w.hscroll -orient horiz -command "$c xview"
  26. scrollbar $w.vscroll -command "$c yview"
  27. canvas $c -relief sunken -borderwidth 2 -scrollregion {-11c -11c 50c 20c} 
  28. -xscrollcommand "$w.hscroll set" 
  29. -yscrollcommand "$w.vscroll set"
  30. pack $w.grid -expand yes -fill both -padx 1 -pady 1
  31. grid rowconfig    $w.grid 0 -weight 1 -minsize 0
  32. grid columnconfig $w.grid 0 -weight 1 -minsize 0
  33. grid $c -padx 1 -in $w.grid -pady 1 
  34.     -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news
  35. grid $w.vscroll -in $w.grid -padx 1 -pady 1 
  36.     -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky news
  37. grid $w.hscroll -in $w.grid -padx 1 -pady 1 
  38.     -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news
  39. set bg [lindex [$c config -bg] 4]
  40. for {set i 0} {$i < 20} {incr i} {
  41.     set x [expr {-10 + 3*$i}]
  42.     for {set j 0; set y -10} {$j < 10} {incr j; incr y 3} {
  43. $c create rect ${x}c ${y}c [expr {$x+2}]c [expr {$y+2}]c 
  44. -outline black -fill $bg -tags rect
  45. $c create text [expr {$x+1}]c [expr {$y+1}]c -text "$i,$j" 
  46.     -anchor center -tags text
  47.     }
  48. }
  49. $c bind all <Any-Enter> "scrollEnter $c"
  50. $c bind all <Any-Leave> "scrollLeave $c"
  51. $c bind all <1> "scrollButton $c"
  52. bind $c <2> "$c scan mark %x %y"
  53. bind $c <B2-Motion> "$c scan dragto %x %y"
  54. if {[tk windowingsystem] eq "aqua"} {
  55.     bind $c <MouseWheel> {
  56.         %W yview scroll [expr {- (%D)}] units
  57.     }
  58.     bind $c <Option-MouseWheel> {
  59.         %W yview scroll [expr {-10 * (%D)}] units
  60.     }
  61.     bind $c <Shift-MouseWheel> {
  62.         %W xview scroll [expr {- (%D)}] units
  63.     }
  64.     bind $c <Shift-Option-MouseWheel> {
  65.         %W xview scroll [expr {-10 * (%D)}] units
  66.     }
  67. }
  68. proc scrollEnter canvas {
  69.     global oldFill
  70.     set id [$canvas find withtag current]
  71.     if {[lsearch [$canvas gettags current] text] >= 0} {
  72. set id [expr {$id-1}]
  73.     }
  74.     set oldFill [lindex [$canvas itemconfig $id -fill] 4]
  75.     if {[winfo depth $canvas] > 1} {
  76. $canvas itemconfigure $id -fill SeaGreen1
  77.     } else {
  78. $canvas itemconfigure $id -fill black
  79. $canvas itemconfigure [expr {$id+1}] -fill white
  80.     }
  81. }
  82. proc scrollLeave canvas {
  83.     global oldFill
  84.     set id [$canvas find withtag current]
  85.     if {[lsearch [$canvas gettags current] text] >= 0} {
  86. set id [expr {$id-1}]
  87.     }
  88.     $canvas itemconfigure $id -fill $oldFill
  89.     $canvas itemconfigure [expr {$id+1}] -fill black
  90. }
  91. proc scrollButton canvas {
  92.     global oldFill
  93.     set id [$canvas find withtag current]
  94.     if {[lsearch [$canvas gettags current] text] < 0} {
  95. set id [expr {$id+1}]
  96.     }
  97.     puts stdout "You buttoned at [lindex [$canvas itemconf $id -text] 4]"
  98. }