42 lines
774 B
Tcl
42 lines
774 B
Tcl
#!/bin/sh
|
|
#\
|
|
exec wish "$0" "$@"
|
|
|
|
proc entFmt {format buf c ins inv} {
|
|
puts "entFmt: $format $buf $c $ins $inv"
|
|
return 1
|
|
|
|
set r 1
|
|
set bmax [expr [string length $buf]-1]
|
|
if {$ins} {
|
|
### insert a char
|
|
set f [string index $format $bmax]
|
|
for {set i $bmax} {$i < 1000} {incr i} {
|
|
upvar $inv new
|
|
set new $buf
|
|
if {[string first $f "zZ9aAxX"] > 0} {
|
|
set new [string range $buf 0 end-1]$f
|
|
set r 0
|
|
}
|
|
}
|
|
} else {
|
|
### delete a char
|
|
}
|
|
puts "return: $r"
|
|
return $r
|
|
}
|
|
|
|
### exemplo de uso
|
|
|
|
label .l4 -text "A phone number:\
|
|
\n(99) 9999-9999"
|
|
entry .e4 -vcmd {entFmt {(99) 9999-9999} %P %S %d Ve4} \
|
|
-validate key -invcmd {
|
|
%W delete 0 end
|
|
%W insert 0 $Ve4
|
|
after idle %W configure -validate key
|
|
}
|
|
|
|
pack .l4 .e4
|
|
|