Advanced Search
Mail us
Home    Manuel    Links    Faq    Submit a tcl/tk Reference    Contact Us

    Some examples tcl/tk codes     Man of Bwidget     Man of blt     mkwidget screenshots     TkOgl     Video Demo real.


  Is there an overwrite/overstrike mode for text/entry widget?
 
 Not by default, but you can change the tkTextInsert and tkEntryInsert
library procedures to include this with the following:

proc tkTextInsert {w s} {
    global tkPriv
    if {[string match {} $s] || [string match "disabled" [$w cget -state]])} {
        return
    }
    if {[catch {
        if {[$w compare sel.first <= insert]
                && [$w compare sel.last >= insert]} {
            $w delete sel.first sel.last
        }
    }] && [info exists tkPriv(overwrite)] && $tkPriv(overwrite)} {
        if {[$w compare "insert+[string len $s]c" < "insert lineend"]} {
            $w delete insert "insert+[string length $s]c"
        } else {
            $w delete insert "insert lineend"
        }
    }
    $w insert insert $s
    $w see insert
}
 
proc tkEntryInsert {w s} {
    global tkPriv
    if {[string match {} $s]} {
        return
    }
    if {[catch {
        set insert [$w index insert]
        if {([$w index sel.first] <= $insert)
                && ([$w index sel.last] >= $insert)} {
            $w delete sel.first sel.last
        }
    }] && [info exists tkPriv(overwrite)] && $tkPriv(overwrite)} {
        $w delete insert [expr {[$w index insert]+[string length $s]}]
    }
    $w insert insert $s
    tkEntrySeeInsert $w
}

Thus you just set the tkPriv(overwrite) variable to 0/1 to switch
between the overwrite and insert modes.