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

📄 utils.tcl

📁 Linux下的MSN聊天程序源码
💻 TCL
📖 第 1 页 / 共 2 页
字号:
            }        } else {            if { $arglen == 2 } {                set widget [lindex $args 1]                if { ![winfo exists $widget] } {                    return -code error "BWidget::place: \"$widget\" does not exist"                }	    } else {		set widget .	    }            set sw [winfo screenwidth  $path]            set sh [winfo screenheight $path]            if { $idx == 1 } {                if { $arglen == 2 } {                    # center to widget                    set x0 [expr {[winfo rootx $widget] + ([winfo width  $widget] - $w)/2}]                    set y0 [expr {[winfo rooty $widget] + ([winfo height $widget] - $h)/2}]                } else {                    # center to screen                    set x0 [expr {([winfo screenwidth  $path] - $w)/2 - [winfo vrootx $path]}]                    set y0 [expr {([winfo screenheight $path] - $h)/2 - [winfo vrooty $path]}]                }                set x "+$x0"                set y "+$y0"                if {$::tcl_platform(platform) != "windows"} {                    if { $x0+$w > $sw } {set x "-0"; set x0 [expr {$sw-$w}]}                    if { $x0 < 0 }      {set x "+0"}                    if { $y0+$h > $sh } {set y "-0"; set y0 [expr {$sh-$h}]}                    if { $y0 < 0 }      {set y "+0"}                }            } else {                set x0 [winfo rootx $widget]                set y0 [winfo rooty $widget]                set x1 [expr {$x0 + [winfo width  $widget]}]                set y1 [expr {$y0 + [winfo height $widget]}]                if { $idx == 2 || $idx == 3 } {                    set y "+$y0"                    if {$::tcl_platform(platform) != "windows"} {                        if { $y0+$h > $sh } {set y "-0"; set y0 [expr {$sh-$h}]}                        if { $y0 < 0 }      {set y "+0"}                    }                    if { $idx == 2 } {                        # try left, then right if out, then 0 if out                        if { $x0 >= $w } {                            set x "+[expr {$x0-$sw}]"                        } elseif { $x1+$w <= $sw } {                            set x "+$x1"                        } else {                            set x "+0"                        }                    } else {                        # try right, then left if out, then 0 if out                        if { $x1+$w <= $sw } {                            set x "+$x1"                        } elseif { $x0 >= $w } {                            set x "+[expr {$x0-$sw}]"                        } else {                            set x "-0"                        }                    }                } else {                    set x "+$x0"                    if {$::tcl_platform(platform) != "windows"} {                        if { $x0+$w > $sw } {set x "-0"; set x0 [expr {$sw-$w}]}                        if { $x0 < 0 }      {set x "+0"}                    }                    if { $idx == 4 } {                        # try top, then bottom, then 0                        if { $h <= $y0 } {                            set y "+[expr {$y0-$sh}]"                        } elseif { $y1+$h <= $sh } {                            set y "+$y1"                        } else {                            set y "+0"                        }                    } else {                        # try bottom, then top, then 0                        if { $y1+$h <= $sh } {                            set y "+$y1"                        } elseif { $h <= $y0 } {                            set y "+[expr {$y0-$sh}]"                        } else {                            set y "-0"                        }                    }                }            }        }        wm geometry $path "${w}x${h}${x}${y}"    } else {        wm geometry $path "${w}x${h}"    }    update idletasks}# ----------------------------------------------------------------------------#  Command BWidget::grab# ----------------------------------------------------------------------------proc BWidget::grab { option path } {    variable _gstack    if { $option == "release" } {        catch {::grab release $path}        while { [llength $_gstack] } {            set grinfo  [lindex $_gstack end]            set _gstack [lreplace $_gstack end end]            foreach {oldg mode} $grinfo {                if { ![string equal $oldg $path] && [winfo exists $oldg] } {                    if { $mode == "global" } {                        catch {::grab -global $oldg}                    } else {                        catch {::grab $oldg}                    }                    return                }            }        }    } else {        set oldg [::grab current]        if { $oldg != "" } {            lappend _gstack [list $oldg [::grab status $oldg]]        }        if { $option == "global" } {            ::grab -global $path        } else {            ::grab $path        }    }}# ----------------------------------------------------------------------------#  Command BWidget::focus# ----------------------------------------------------------------------------proc BWidget::focus { option path {refocus 1} } {    variable _fstack    if { $option == "release" } {        while { [llength $_fstack] } {            set oldf [lindex $_fstack end]            set _fstack [lreplace $_fstack end end]            if { ![string equal $oldf $path] && [winfo exists $oldf] } {                if {$refocus} {catch {::focus -force $oldf}}                return            }        }    } elseif { $option == "set" } {        lappend _fstack [::focus]        ::focus -force $path    }}# BWidget::refocus --##	Helper function used to redirect focus from a container frame in #	a megawidget to a component widget.  Only redirects focus if#	focus is already on the container.## Arguments:#	container	container widget to redirect from.#	component	component widget to redirect to.## Results:#	None.proc BWidget::refocus {container component} {    if { [string equal $container [::focus]] } {	::focus $component    }    return}# BWidget::badOptionString --##	Helper function to return a proper error string when an option#       doesn't match a list of given options.## Arguments:#	type	A string that represents the type of option.#	value	The value that is in-valid.#       list	A list of valid options.## Results:#	None.proc BWidget::badOptionString {type value list} {    set last [lindex $list end]    set list [lreplace $list end end]    return "bad $type \"$value\": must be [join $list ", "], or $last"}proc BWidget::wrongNumArgsString { string } {    return "wrong # args: should be \"$string\""}proc BWidget::read_file { file } {    set fp [open $file]    set x  [read $fp [file size $file]]    close $fp    return $x}proc BWidget::classes { class } {    variable use    ${class}::use    set classes [list $class]    if {![info exists use($class)]} { return }    foreach class $use($class) {	eval lappend classes [classes $class]    }    return [lsort -unique $classes]}proc BWidget::library { args } {    variable use    set libs    [list widget init utils]    set classes [list]    foreach class $args {	${class}::use        eval lappend classes [classes $class]    }    eval lappend libs [lsort -unique $classes]    set library ""    foreach lib $libs {	if {![info exists use($lib,file)]} {	    set file [file join $::BWIDGET::LIBRARY $lib.tcl]	} else {	    set file [file join $::BWIDGET::LIBRARY $use($lib,file).tcl]	}        append library [read_file $file]    }    return $library}proc BWidget::inuse { class } {    variable ::Widget::_inuse    if {![info exists _inuse($class)]} { return 0 }    return [expr $_inuse($class) > 0]}proc BWidget::write { filename {mode w} } {    variable use    if {![info exists use(classes)]} { return }    set classes [list]    foreach class $use(classes) {	if {![inuse $class]} { continue }	lappend classes $class    }    set fp [open $filename $mode]    puts $fp [eval library $classes]    close $fp    return}# BWidget::bindMouseWheel --##	Bind mouse wheel actions to a given widget.## Arguments:#	widget - The widget to bind.## Results:#	None.proc BWidget::bindMouseWheel { widget } {    bind $widget <MouseWheel>         {%W yview scroll [expr {-%D/24}]  units}    bind $widget <Shift-MouseWheel>   {%W yview scroll [expr {-%D/120}] pages}    bind $widget <Control-MouseWheel> {%W yview scroll [expr {-%D/120}] units}    bind $widget <Button-4> {event generate %W <MouseWheel> -delta  120}    bind $widget <Button-5> {event generate %W <MouseWheel> -delta -120}}

⌨️ 快捷键说明

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