261869247 发表于 2010-7-17 18:02:40

输入框 只能输入汉字【已解决】

本帖最后由 261869247 于 2010-7-23 13:19 编辑

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

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

zcx880517 发表于 2010-7-19 22:34:18

这个没听说,,帮你顶下。。

afan 发表于 2010-7-19 23:51:42

没有这个样式,只能输入后判断是否为双字节字符。

netegg 发表于 2010-7-20 01:39:12

回复 3# afan
afan, 想了想这个问题,监控消息,用正则匹配汉字,如果不是就不改变内容,应该可以吧

rikthhpgf2005 发表于 2010-7-20 09:26:44

没试过。有意思,想想

xsjtxy 发表于 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

afan 发表于 2010-7-20 11:22:07

回复 4# netegg


    是可以用监控消息+判断来实现,记得以前有类似的拦截消息的方法,不过都是关闭后进程无法退出,CPU超高占用,不知道后来解决没有~
也可以用监控输入消息,不是双字节字符就删除之,可以试试

netegg 发表于 2010-7-20 12:18:52

回复 7# afan

$EN_CHANGE 消息应该可以吧

afan 发表于 2010-7-20 12:21:56

回复 8# netegg


    这个没试过,我用 $WM_COMMAND 貌似可以~

netegg 发表于 2010-7-20 12:25:25

回复 9# afan
是用$WM_COMMAND,我指的是里面的$iCode

afan 发表于 2010-7-20 12:27:41

好像比较麻烦,如果正常输入还好办,还有粘贴、退格之类的情况要考虑进去

netegg 发表于 2010-7-20 12:30:01

回复 11# afan
这倒是,那就不考虑了,情况太多了{:face (189):}

afan 发表于 2010-7-20 12:30:52

回复 12# netegg


    呵呵,咱也撤~

3mile 发表于 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

afan 发表于 2010-7-20 22:06:15

回复 14# 3mile


    快速输入半角字符或在已输入的字符中插入字符或粘贴时都会有错误发生,这种后悔药很难完美,呵呵~
只有消息拦截才是最有效的
页: [1] 2
查看完整版本: 输入框 只能输入汉字【已解决】