Hi,
kann man eine InputBox() irgendwie einschränken,
sodass mann nur bestimmte Zeichen eingeben kann?
Also, dass man nur Buchstabe und Zahlen, jedoch
keine Sonderzeichen eingeben kann?
MfG
qixx
Hi,
kann man eine InputBox() irgendwie einschränken,
sodass mann nur bestimmte Zeichen eingeben kann?
Also, dass man nur Buchstabe und Zahlen, jedoch
keine Sonderzeichen eingeben kann?
MfG
qixx
Die InputBox: Nein!
Eine eigene GUI mit Input-Control: Ja!
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate('')
$Edit = GUICtrlCreateInput('', 20, 20, 200, 20)
GUISetState()
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
If BitAND($wParam, 0x0000FFFF) = $Edit Then
GUICtrlSetData($Edit, StringRegExpReplace(GUICtrlRead($Edit), '\W', '')) ; nur a-z, A-Z, 0-9 und _ erlaubt
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_COMMAND
Danke.
Dann mache ich es jetzt halt mit einer GUI.
Hätte ja sein können, dass man die InputBox
auf irgend einem Wege einschränken kann.
MfG
qixx
Wie wäre das denn?
Ist ein bisschen spärlich beschrieben und auskommentiert, aber ich bin ja uach noch nich fertig
#include <GuiConstants.au3>
#include <Array.au3>
Global $sInputs_Array[1][2]
If Not IsDeclared("WM_COMMAND") Then Global Const $WM_COMMAND = 0x0111
If Not IsDeclared("WM_MOVE") Then Global Const $WM_MOVE = 0x0003
If Not IsDeclared("WM_LBUTTONDOWN") Then Global Const $WM_LBUTTONDOWN = 0x0201
If Not IsDeclared("WM_RBUTTONDOWN") Then Global Const $WM_RBUTTONDOWN = 0x0204
Global $sToolTip_Text[2] = ["You can only type certain characters.", "Unacceptable Character:"]
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
GUIRegisterMsg($WM_MOVE, "WM_CLEAR_TOOLTIP")
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_CLEAR_TOOLTIP")
GUIRegisterMsg($WM_RBUTTONDOWN, "WM_CLEAR_TOOLTIP")
;string rückgabe
$input = _InputBox(3,"InputBox Beispiel","[0-9a-z] = Keine Zahlen oder Kleinbuchstaben|[A-Z] = Keine Großbuchstaben|[0-5aeiou] = Keine Zahlen von 0 bis 5 und keine kleingeschriebenen Vokale", _
"ABCDEFG|nur klein|9876KLMNRS","[0-9a-z]|[A-Z]|[0-5aeiou]",1)
MsgBox(0,"",$input)
;Array Rückgabe
$aInput = _InputBox(3,"InputBox Beispiel","[0-9a-z] = Keine Zahlen oder Kleinbuchstaben|[A-Z] = Keine Großbuchstaben|[0-5aeiou] = Keine Zahlen von 0 bis 5 und keine kleingeschriebenen Vokale", _
"ABCDEFG|nur klein|9876KLMNRS","[0-9a-z]|[A-Z]|[0-5aeiou]")
_ArrayDisplay($aInput)
Func _InputBox($iCount,$sTitle,$sText,$sDefault,$sRegExp="",$iMode=0,$sDelim="|")
;Author: SEuBo
;$iCount: Anzahl der "Inputgruppen"
;$sTitle: Titel der _InputBox
;$sText: Text für die einzelnen Gruppen. Hier wird ein Trennzeichenseperierter String benötigt
;BSP: "1|2|3". Das Trennzeichen kann in $sDelim selbst bestimmt werden, falls das erwünscht ist
;$sDefault: Default-Text für die Input felder. Hier wird wieder ein seperierter String benötigt.
;$iMode: Der Rückgabemodus. 0 (Standard) = Array. 1 = mit $sDelim seperierter String.
Dim $sInputs_Array[1][2]
$OnEvent = Opt("GUIOnEventMode",0)
Local $aData[$iCount+1][2], $ifCount = 0, $aText = StringSplit($sText,$sDelim), $aDefault = StringSplit($sDefault,$sDelim), $aRegExp = StringSplit($sRegExp,$sDelim)
If $iCount = "" OR $iCount < 1 OR $iMode < 0 OR $iMode > 1 OR $sDelim = "" Then
Return SetError(2,0,"")
EndIf
If $aDefault[0] < $iCount+1 Or $aDefault[0] > $iCount+1 Then
ReDim $aDefault[$iCount+1]
EndIf
If $aText[0] < $iCount+1 Or $aText[0] > $iCount+1 Then
ReDim $aText[$iCount+1]
EndIf
If $aRegExp[0] < $iCount+1 or $aRegExp[0] > $iCount+1 Then
ReDim $aRegExp[$iCount+1]
EndIf
$_InputBox = GUICreate($sTitle,220,65+$iCount*95,-1,-1,-1,0x00000008)
For $i = 1 to $iCount
$aData[$i][0] = GUICtrlCreateLabel($aText[$i], 20, ($ifCount*95)+20, 180, 50)
$aData[$i][1] = GUICtrlCreateInput($aDefault[$i], 20, ($ifCount*95)+75, 180, 25)
_GUIInputSetRegExp($aData[$i][1],$aRegExp[$i])
$ifCount +=1
Next
$hButton = GUICtrlCreateButton("Ok",20,(($ifCount-1)*95)+110,80,25)
$hCancel = GUICtrlCreateButton("Cancel",120,(($ifCount-1)*95)+110,80,25)
GUISetState()
While 1 * Sleep(50)
$nMsg = GUIGetMsg()
Switch $nMsg
case -3, $hCancel
GUIDelete($_InputBox)
Return SetError(1,0,"")
Case $hButton
Switch $iMode
Case 0
Local $aRet[$iCount]
For $i = 1 to $iCount
$aRet[$i-1] = GUICtrlRead($aData[$i][1])
Next
GUIDelete($_InputBox)
Return $aRet
Case 1
Local $aRet
For $i = 1 to $iCount
$aRet &= GUICtrlRead($aData[$i][1]) & $sDelim
Next
GUIDelete($_InputBox)
Return StringTrimRight($aRet,1)
EndSwitch
EndSwitch
WEnd
Opt("GUIOnEventMode",$OnEvent)
EndFunc
;MrCreator========>
;Edited by SEuBo
Func _GUIInputSetRegExp($CtrlId,$sRegExp)
Local $iUbound = UBound($sInputs_Array)
ReDim $sInputs_Array[$iUbound+1][2]
$sInputs_Array[$iUbound][0] = $CtrlId
$sInputs_Array[$iUbound][1] = $sRegExp
EndFunc
Func _Input_Changed($hWnd, $CtrlId, $iIndex)
ToolTip("")
Local $Read_Input = GUICtrlRead($CtrlId)
If StringRegExp($Read_Input,$sInputs_Array[$iIndex][1]) Then
GUICtrlSetData($CtrlId, StringRegExpReplace($Read_Input, $sInputs_Array[$iIndex][1], ''))
Local $Gui_Get_Pos = WinGetPos($hWnd)
Local $Ctrl_Get_Pos = ControlGetPos($hWnd, "", $CtrlId)
Local Const $SM_CYCAPTION = 4 ;Titelbar heigth
Local Const $SM_CXFIXEDFRAME = 7 ;Window border size
Local $X_Pos = $Gui_Get_Pos[0] + $Ctrl_Get_Pos[0] + $Ctrl_Get_Pos[2] + GetSystemMetrics($SM_CXFIXEDFRAME)
Local $Y_Pos = $Gui_Get_Pos[1] + $Ctrl_Get_Pos[1] + $Ctrl_Get_Pos[3] + GetSystemMetrics($SM_CYCAPTION)
ToolTip($sToolTip_Text[0], $X_Pos, $Y_Pos, $sToolTip_Text[1], 3, 1+4)
DllCall("user32.dll", "int", "MessageBeep", "int", 0x0)
EndIf
EndFunc
Func WM_CLEAR_TOOLTIP($hWnd, $iMsg, $wParam, $lParam)
ToolTip("")
Return $GUI_RUNDEFMSG
EndFunc
Func MY_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
If $hWnd = 0 Or Not WinExists($hWnd) Then Return $GUI_RUNDEFMSG
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Local Const $EN_CHANGE = 0x300
Local Const $EN_UPDATE = 0x400
Local Const $EN_SETFOCUS = 0x100
Local Const $EN_KILLFOCUS = 0x200
For $i = 1 To UBound($sInputs_Array)-1
If $nID = $sInputs_Array[$i][0] Then
Switch $nNotifyCode
Case $EN_UPDATE ;$EN_CHANGE
_Input_Changed($hWnd,$sInputs_Array[$i][0],$i)
Case $EN_SETFOCUS, $EN_KILLFOCUS
ToolTip("")
EndSwitch
ExitLoop
EndIf
Next
Return $GUI_RUNDEFMSG
EndFunc
Func GetSystemMetrics($Flag)
Local $iRet = DllCall('user32.dll', 'int', 'GetSystemMetrics', 'int', $Flag)
Return $iRet[0]
EndFunc
;<==========
[/autoit]So auf die Schnelle blicke ich da jetzt nicht
durch. Aber ich schaue mir das morgen
nochmal an.
Danke!
MfG
qixx
Wichtig für dich sind nur Zeile 21-29. Du kannst natürlich statt 3 "Gruppen" auch nur eine machen
[autoit];string rückgabe
$input = _InputBox(1,"InputBox Beispiel","[0-9a-z] = Keine Zahlen oder Kleinbuchstaben", "ABCDEFG","[0-9a-z]",1)
MsgBox(0,"",$input)
Dann sieht es aus wie eine ganz normale InputBox.
bei dem Parameter $sRegExp kannst du einen regulären Ausdruck eingeben, den du filtern möchtest. zB: [aeiou] filtert alle kleingeschriebenen Vokale.
Für infos zu RegEx:
http://www.regenechsen.de/phpwcms/index.php?id=66,0,0,1,0,0
Hier eine Liste mit RegEx Elementen:
http://www.regenechsen.de/phpwcms/index.php?regex_allg_liste
Sehr schön.
Werde ich mal ausprobieren!
Danke!
MfG
qixx