输入框 只能输入汉字【已解决】
本帖最后由 261869247 于 2010-7-23 13:19 编辑$Input1 = GUICtrlCreateInput("", 55, 35, 41, 21,$ES_NUMBER);本例子只可输入数字
知道这个是只能输入数字 求解 只能输入汉字的 后缀样式有吗? 这个没听说,,帮你顶下。。 没有这个样式,只能输入后判断是否为双字节字符。 回复 3# afan
afan, 想了想这个问题,监控消息,用正则匹配汉字,如果不是就不改变内容,应该可以吧 没试过。有意思,想想 哎。我笨。想不到其它办法了。这样吧。也不占CPU
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 623, 449, 192, 114)
dim $ii = ""
$Input1 = GUICtrlCreateInput($ii, 72, 88, 497, 21,$ES_WANTRETURN)
GUISetState(@SW_SHOW)
AdlibRegister("Input",10)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
func Input()
$i = GUICtrlRead($Input1)
if $i = $ii then Return
$i = StringReplace($i, "0", "")
$i = StringReplace($i, "1", "")
$i = StringReplace($i, "2", "")
$i = StringReplace($i, "3", "")
$i = StringReplace($i, "4", "")
$i = StringReplace($i, "5", "")
$i = StringReplace($i, "6", "")
$i = StringReplace($i, "7", "")
$i = StringReplace($i, "8", "")
$i = StringReplace($i, "9", "")
$i = StringReplace($i, "a", "")
$i = StringReplace($i, "b", "")
$i = StringReplace($i, "c", "")
$i = StringReplace($i, "d", "")
$i = StringReplace($i, "e", "")
$i = StringReplace($i, "f", "")
$i = StringReplace($i, "g", "")
$i = StringReplace($i, "h", "")
$i = StringReplace($i, "i", "")
$i = StringReplace($i, "j", "")
$i = StringReplace($i, "k", "")
$i = StringReplace($i, "l", "")
$i = StringReplace($i, "m", "")
$i = StringReplace($i, "n", "")
$i = StringReplace($i, "o", "")
$i = StringReplace($i, "p", "")
$i = StringReplace($i, "q", "")
$i = StringReplace($i, "r", "")
$i = StringReplace($i, "s", "")
$i = StringReplace($i, "t", "")
$i = StringReplace($i, "u", "")
$i = StringReplace($i, "v", "")
$i = StringReplace($i, "w", "")
$i = StringReplace($i, "x", "")
$i = StringReplace($i, "y", "")
$i = StringReplace($i, "z", "")
GUICtrlSetData($Input1,$i)
$ii = $i
endfunc
回复 4# netegg
是可以用监控消息+判断来实现,记得以前有类似的拦截消息的方法,不过都是关闭后进程无法退出,CPU超高占用,不知道后来解决没有~
也可以用监控输入消息,不是双字节字符就删除之,可以试试 回复 7# afan
$EN_CHANGE 消息应该可以吧 回复 8# netegg
这个没试过,我用 $WM_COMMAND 貌似可以~ 回复 9# afan
是用$WM_COMMAND,我指的是里面的$iCode 好像比较麻烦,如果正常输入还好办,还有粘贴、退格之类的情况要考虑进去 回复 11# afan
这倒是,那就不考虑了,情况太多了{:face (189):} 回复 12# netegg
呵呵,咱也撤~ 来个笨办法,标点符号全角应该不可以吧。#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <array.au3>
Local $InputSplit, $read
$Form1 = GUICreate("Form1", 256, 105, -1, -1)
$Input1 = GUICtrlCreateInput("", 24, 40, 190, 21, $ES_AUTOHSCROLL)
AdlibRegister("scan", 50)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func scan()
$read = GUICtrlRead($Input1)
$InputSplit = StringRegExp($read, '.', 3)
For $i = 0 To UBound($InputSplit) - 1
If StringRegExp($InputSplit[$i], '[^\x00-\xff]', 0) = 0 Then
$InputSplit[$i] = ""
$read = ''
Reread()
EndIf
Next
EndFunc ;==>scan
Func Reread()
For $i = 0 To UBound($InputSplit) - 1
$read &= $InputSplit[$i]
Next
GUICtrlSetData($Input1, $read)
scan()
EndFunc ;==>Reread 回复 14# 3mile
快速输入半角字符或在已输入的字符中插入字符或粘贴时都会有错误发生,这种后悔药很难完美,呵呵~
只有消息拦截才是最有效的
页:
[1]
2