omegabomb 发表于 2009-9-9 22:21:08

如何规定input里面只能输入一定范围内的数字?

本帖最后由 omegabomb 于 2009-9-9 22:23 编辑

比如效果就是一个input里面只能输入1-99之间的数字,输入其他的数字或者字符都无法输入。
并不是在按钮中加一个判断,而是在输入的时候就禁止超出这个范围的字符。
该怎么实现呢?

就像XP系统时间设置时,输入24无法输入的效果。

afan 发表于 2009-9-9 22:23:15

#Include <GuiEdit.au3>
$Input = GUICtrlCreateInput("", xx, xx, xx, xx,$ES_NUMBER)
GUICtrlSetLimit(-1, 2)

omegabomb 发表于 2009-9-9 22:36:46

那假如最大数不是99呢,最大数为50呢?

afan 发表于 2009-9-9 23:22:04

那只能加判断~

sensel 发表于 2009-9-10 00:23:16

GUI循环里加入
If GUICtrlRead(控件ID) > 50 Then GUICtrlSetData(控件ID, 50)
或者点击确定之类按钮后加判断,不符合条件的弹出提示,并设置输入光标到出错控件。

afan 发表于 2009-9-10 00:35:14

建议在循环里加判断,LS的大虾是个方案,我的如下
If GUICtrlRead(控件ID) > 50 then GUICtrlSetData(控件ID,StringTrimRight(GUICtrlRead(控件ID), 1))
感觉用户会踏实点,不会以为按错了键~
当然还可以人性化的加入工具提示窗

netegg 发表于 2009-9-10 01:06:25

看一下ip框如何限定的,自己改一下

pusofalse 发表于 2009-9-10 01:23:04

#include <WinAPI.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>


$hGUI = GUICreate("Test", 200, 100)
$iIpt = GUICtrlCreateInput("", 20, 20, 160, 20)
$hCtrl = GUICtrlGetHandle(-1)
$hCall = DllCallbackRegister("_IptProc", "int", "hWnd;uint;wparam;lparam")
$pCall = DllCallbackGetPtr($hCall)
$hOldCall = _WinAPI_SetWindowLong($hCtrl, -4, $pCall)
GUISetState()

Do
Until guiGetMsg() = -3

Func _IptProc($hWnd, $iMsg, $wparam, $lparam)
        Switch $iMsg
        Case $WM_PASTE
                Return 1
        Case $WM_SETTEXT
                Return 1
        Case $WM_CHAR
                Local $aXY, $sString
                If Not StringIsDigit(Chr($wparam)) AND $wparam <> 8 Then Return 0
                $aXY = _GetCaretPos()
                $aXY = _GUICtrlEdit_CharFromPos($hCtrl, $aXY, $aXY)
                $sString = GUICtrlRead($iIpt)
                If $wparam <> 8 Then
                        $sString = StringLeft($sString, $aXY) & Chr($wparam) & StringRight($sString, StringLen($sString) - $aXY)
                Else
                        $sString = StringLeft($sString, $aXY - 1) & StringRight($sString, StringLen($sString) - $aXY)
                EndIf
                If StringLeft($sString, 1) = "0" Then Return 0
                If $sString <> "" AND (Number($sString) < 1 OR Number($sString) > 50) Then Return 0

        EndSwitch
        Return _WinAPI_CallWindowProc($hOldCall, $hWnd, $iMsg, $wparam, $lparam)
EndFunc        ;==>_IptProc



Func _GetCaretPos()
        Local $aXY, $iResult, $tBuffer

        $tBuffer = DllStructCreate("int X;int Y")
        $iResult = DllCall("User32.dll", "int", "GetCaretPos", "ptr", DllStructGetPtr($tBuffer))
        $aXY = DllStructGetData($tBuffer, "X")
        $aXY = DllStructGetData($tBuffer, "Y")
        $tBuffer = 0
        Return $aXY
EndFunc        ;==>_GetCaretPos

clshuai 发表于 2009-9-10 09:40:33

路过。。。

mande_chen 发表于 2010-1-23 16:38:14

回复 8# pusofalse


    能否用简单点的语句来实现?这个太深奥了

pusofalse 发表于 2010-1-23 16:41:56

回复 10# mande_chen


    NO,以我现在的水平,认为这是最简单的方法。

mande_chen 发表于 2010-1-23 18:07:57

回复 11# pusofalse


    {:3_88:}叹为观止

ssjoe 发表于 2010-11-1 01:45:32

8楼代码不错

qq123123 发表于 2010-11-2 07:11:25

回复 8# pusofalse


    请把复杂的问题,变成简单的脚本!
页: [1]
查看完整版本: 如何规定input里面只能输入一定范围内的数字?