找回密码
 加入
搜索
查看: 9611|回复: 23

[GUI管理] 输入框 只能输入汉字【已解决】

 火.. [复制链接]
发表于 2010-7-17 18:02:40 | 显示全部楼层 |阅读模式
本帖最后由 261869247 于 2010-7-23 13:19 编辑

$Input1 = GUICtrlCreateInput("", 55, 35, 41, 21,$ES_NUMBER);本例子只可输入数字

知道这个是只能输入数字 求解 只能输入汉字的 后缀样式有吗?

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-7-19 22:34:18 | 显示全部楼层
这个没听说,,帮你顶下。。
发表于 2010-7-19 23:51:42 | 显示全部楼层
没有这个样式,只能输入后判断是否为双字节字符。
发表于 2010-7-20 01:39:12 | 显示全部楼层
回复 3# afan
afan, 想了想这个问题,监控消息,用正则匹配汉字,如果不是就不改变内容,应该可以吧
发表于 2010-7-20 09:26:44 | 显示全部楼层
没试过。有意思,想想
发表于 2010-7-20 11:03:47 | 显示全部楼层
哎。我笨。想不到其它办法了。这样吧。也不占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

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-7-20 11:22:07 | 显示全部楼层
回复 4# netegg


    是可以用监控消息+判断来实现,记得以前有类似的拦截消息的方法,不过都是关闭后进程无法退出,CPU超高占用,不知道后来解决没有~
  也可以用监控输入消息,不是双字节字符就删除之,可以试试
发表于 2010-7-20 12:18:52 | 显示全部楼层
回复 7# afan

$EN_CHANGE 消息应该可以吧
发表于 2010-7-20 12:21:56 | 显示全部楼层
回复 8# netegg


    这个没试过,我用 $WM_COMMAND 貌似可以~
发表于 2010-7-20 12:25:25 | 显示全部楼层
回复 9# afan
是用$WM_COMMAND,我指的是里面的$iCode
发表于 2010-7-20 12:27:41 | 显示全部楼层
好像比较麻烦,如果正常输入还好办,还有粘贴、退格之类的情况要考虑进去
发表于 2010-7-20 12:30:01 | 显示全部楼层
回复 11# afan
这倒是,那就不考虑了,情况太多了
发表于 2010-7-20 12:30:52 | 显示全部楼层
回复 12# netegg


    呵呵,咱也撤~
发表于 2010-7-20 21:58:22 | 显示全部楼层
来个笨办法,标点符号全角应该不可以吧。
#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

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-7-20 22:06:15 | 显示全部楼层
回复 14# 3mile


    快速输入半角字符或在已输入的字符中插入字符或粘贴时都会有错误发生,这种后悔药很难完美,呵呵~
只有消息拦截才是最有效的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-17 01:11 , Processed in 0.087136 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表