⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scrollframe.tcl

📁 Linux下的MSN聊天程序源码
💻 TCL
字号:
# ----------------------------------------------------------------------------#  scrollframe.tcl#  This file is part of Unifix BWidget Toolkit#  $Id: scrollframe.tcl 3417 2004-12-03 00:31:24Z tjikkun $# ----------------------------------------------------------------------------#  Index of commands:#     - ScrollableFrame::create#     - ScrollableFrame::configure#     - ScrollableFrame::cget#     - ScrollableFrame::getframe#     - ScrollableFrame::see#     - ScrollableFrame::xview#     - ScrollableFrame::yview#     - ScrollableFrame::_resize# ----------------------------------------------------------------------------namespace eval ScrollableFrame {    Widget::define ScrollableFrame scrollframe    Widget::declare ScrollableFrame {        {-background        TkResource "" 0 frame}        {-width             Int        0  0 {}}        {-height            Int        0  0 {}}        {-areawidth         Int        0  0 {}}        {-areaheight        Int        0  0 {}}        {-constrainedwidth  Boolean    0 0}        {-constrainedheight Boolean    0 0}        {-xscrollcommand    TkResource "" 0 canvas}        {-yscrollcommand    TkResource "" 0 canvas}        {-xscrollincrement  TkResource "" 0 canvas}        {-yscrollincrement  TkResource "" 0 canvas}        {-bg                Synonym    -background}    }    Widget::addmap ScrollableFrame "" :cmd {        -background {} -width {} -height {}         -xscrollcommand {} -yscrollcommand {}        -xscrollincrement {} -yscrollincrement {}    }    Widget::addmap ScrollableFrame "" .frame {-background {}}    variable _widget    bind BwScrollableFrame <Configure> [list ScrollableFrame::_resize %W]    bind BwScrollableFrame <Destroy>   [list Widget::destroy %W]}# ----------------------------------------------------------------------------#  Command ScrollableFrame::create# ----------------------------------------------------------------------------proc ScrollableFrame::create { path args } {    Widget::init ScrollableFrame $path $args    set canvas [eval [list canvas $path] [Widget::subcget $path :cmd] \                    -highlightthickness 0 -borderwidth 0 -relief flat]    set frame  [eval [list frame $path.frame] [Widget::subcget $path .frame] \                    -highlightthickness 0 -borderwidth 0 -relief flat]    $canvas create window 0 0 -anchor nw -window $frame -tags win \        -width  [Widget::cget $path -areawidth] \        -height [Widget::cget $path -areaheight]    bind $frame <Configure> \	    [list ScrollableFrame::_frameConfigure $canvas $frame %w %h]    bindtags $path [list $path BwScrollableFrame [winfo toplevel $path] all]    return [Widget::create ScrollableFrame $path]}# ----------------------------------------------------------------------------#  Command ScrollableFrame::configure# ----------------------------------------------------------------------------proc ScrollableFrame::configure { path args } {    set res [Widget::configure $path $args]    set upd 0    set modcw [Widget::hasChanged $path -constrainedwidth cw]    set modw  [Widget::hasChanged $path -areawidth w]    if { $modcw || (!$cw && $modw) } {        if { $cw } {            set w [winfo width $path]        }        set upd 1    }    set modch [Widget::hasChanged $path -constrainedheight ch]    set modh  [Widget::hasChanged $path -areaheight h]    if { $modch || (!$ch && $modh) } {        if { $ch } {            set h [winfo height $path]        }        set upd 1    }    if { $upd } {        $path:cmd itemconfigure win -width $w -height $h    }    return $res}# ----------------------------------------------------------------------------#  Command ScrollableFrame::cget# ----------------------------------------------------------------------------proc ScrollableFrame::cget { path option } {    return [Widget::cget $path $option]}# ----------------------------------------------------------------------------#  Command ScrollableFrame::getframe# ----------------------------------------------------------------------------proc ScrollableFrame::getframe { path } {    return $path.frame}# ----------------------------------------------------------------------------#  Command ScrollableFrame::see# ----------------------------------------------------------------------------proc ScrollableFrame::see { path widget {vert top} {horz left} {xOffset 0} {yOffset 0}} {    set x0  [winfo x $widget]    set y0  [winfo y $widget]    set x1  [expr {$x0+[winfo width  $widget]}]    set y1  [expr {$y0+[winfo height $widget]}]    set xb0 [$path:cmd canvasx 0]    set yb0 [$path:cmd canvasy 0]    set xb1 [$path:cmd canvasx [winfo width  $path]]    set yb1 [$path:cmd canvasy [winfo height $path]]    set dx  0    set dy  0        if { [string equal $horz "left"] } {	if { $x1 > $xb1 } {	    set dx [expr {$x1-$xb1}]	}	if { $x0 < $xb0+$dx } {	    set dx [expr {$x0-$xb0}]	}    } elseif { [string equal $horz "right"] } {	if { $x0 < $xb0 } {	    set dx [expr {$x0-$xb0}]	}	if { $x1 > $xb1+$dx } {	    set dx [expr {$x1-$xb1}]	}    }    if { [string equal $vert "top"] } {	if { $y1 > $yb1 } {	    set dy [expr {$y1-$yb1}]	}	if { $y0 < $yb0+$dy } {	    set dy [expr {$y0-$yb0}]	}    } elseif { [string equal $vert "bottom"] } {	if { $y0 < $yb0 } {	    set dy [expr {$y0-$yb0}]	}	if { $y1 > $yb1+$dy } {	    set dy [expr {$y1-$yb1}]	}    }    if {($dx + $xOffset) != 0} {	set x [expr {($xb0+$dx+$xOffset)/[winfo width $path.frame]}]	$path:cmd xview moveto $x    }    if {($dy + $yOffset) != 0} {	set y [expr {($yb0+$dy+$yOffset)/[winfo height $path.frame]}]	$path:cmd yview moveto $y    }}# ----------------------------------------------------------------------------#  Command ScrollableFrame::xview# ----------------------------------------------------------------------------proc ScrollableFrame::xview { path args } {    return [eval [list $path:cmd xview] $args]}# ----------------------------------------------------------------------------#  Command ScrollableFrame::yview# ----------------------------------------------------------------------------proc ScrollableFrame::yview { path args } {    return [eval [list $path:cmd yview] $args]}# ----------------------------------------------------------------------------#  Command ScrollableFrame::_resize# ----------------------------------------------------------------------------proc ScrollableFrame::_resize { path } {    if { [Widget::getoption $path -constrainedwidth] } {        $path:cmd itemconfigure win -width [winfo width $path]    }    if { [Widget::getoption $path -constrainedheight] } {        $path:cmd itemconfigure win -height [winfo height $path]    }}# ----------------------------------------------------------------------------#  Command ScrollableFrame::_frameConfigure# ----------------------------------------------------------------------------proc ScrollableFrame::_frameConfigure {canvas frame width height} {    # This ensures that we don't get funny scrollability in the frame    # when it is smaller than the canvas space    if {[winfo height $frame] < [winfo height $canvas]} {	set height [winfo height $canvas]    }    if {[winfo width $frame] < [winfo width $canvas]} {	set width [winfo width $canvas]    }    $canvas:cmd configure -scrollregion [list 0 0 $width $height]}proc ScrollableFrame::compute_width { path } {		$path configure -width [winfo reqwidth [$path getframe]]		}proc ScrollableFrame::compute_height { path } {		$path configure -height [winfo reqheight [$path getframe]]}proc ScrollableFrame::compute_size { path } {	$path compute_width	$path compute_height}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -