3mile 发表于 2010-7-20 22:38:10

呵呵,也发现这个问题了。再来个消息模式的#include <GUIComboBox.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
Global $hGUI
Global Const $EN_CHANGE = 0x300
$hGUI = GUICreate("检测Combo有键盘输入", 400, 96)
$hinput = GUICtrlCreateInput("",2,5,396,20);
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
Func WM_COMMAND($hWinHandle, $iMsg, $wParam, $lParam)
If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WINAPI_LoWord($wParam) = $hinput Then
       Local $read,$Re,$ReRead
        $read=GUICtrlRead($hinput)
        $InputSplit = StringRegExp($read, '.', 3)
        For $n=0 To UBound($InputSplit)-1
        If StringRegExp($InputSplit[$n],'[^\x00-\xff]',0)=0 Then
                $read=StringReplace($read,$InputSplit[$n],'')
                GUICtrlSetData($hinput,$Read)
        EndIf
        Next
EndIf
EndFunc

3mile 发表于 2010-7-20 22:42:13

14楼的改造代码,应该可以解决快速输入半角字符或在已输入的字符中插入字符或粘贴时发生错误的问题。#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 $n=0 To UBound($InputSplit)-1
        If StringRegExp($InputSplit[$n],'[^\x00-\xff]',0)=0 Then
                $read=StringReplace($read,$InputSplit[$n],'')
                GUICtrlSetData($input1,$Read)
        EndIf
        Next
EndFunc   ;==>scan

afan 发表于 2010-7-20 22:48:37

16# 17# 都不错,学习了~~

lxz 发表于 2010-7-21 05:06:26

学习了~~..

261869247 发表于 2010-7-23 13:19:56

受教了 非常不错 呵呵 每天都在学习!

261869247 发表于 2010-7-23 13:20:21

     谢谢大家!

styledream 发表于 2010-7-23 15:08:31

在6# xsjtxy 兄弟的基础上增加了一个功能,可以限制全角数字及字母的输入#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 500, 150, -1, -1)
dim $ii = ""
$Input1 = GUICtrlCreateInput($ii, 30, 50, 440, 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", "")

; 全角符的数字及英文
$i = StringReplace($i, "0", "")
$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

nmgwddj 发表于 2010-7-23 16:30:59

P版出过题的。我忘记叫什么了。
记得有很多人都是先输入消息 判断 然后删除。
P版的代码是直接截取消息

kk_lee69 发表于 2010-7-28 13:44:06

學習了.......不知道是不是有 P版 的 源碼
页: 1 [2]
查看完整版本: 输入框 只能输入汉字【已解决】