See also discussion at: http://www.powerbasic.com/support/pb...ad.php?t=22185
Code:
' INPBOX.BAS ' "safe" wrapper for INPUTBOX$ function ' includes validation for "digits only" ' status: Public Domain ' coded by Egbert Zijlema #COMPILE EXE #DIM ALL %FALSE = 0 %TRUE = 1 %IDCANCEL = 2 %IDRETRY = 4 %MB_RETRYCANCEL = &H00000005& %MB_ICONEXCLAMATION = &H00000030& FUNCTION iInputBox(sPrompt AS STRING, sTitle AS STRING, sResult AS STRING, OPTIONAL BYVAL sDefault AS STRING, OPTIONAL BYVAL iNumerals AS LONG) AS LONG ' iNumerals can either be %FALSE (= 0 or ignored) or %TRUE ' if iNumerals is set while sDefault is not, sDefault - although optional - cannot be ignored. It should be passed as an empty string ("") LOCAL iPos AS LONG, iAgain AS LONG RETRY: FUNCTION = %TRUE sResult = INPUTBOX$(sPrompt, sTitle, sDefault) IF sResult = "" THEN ' cancel button clicked FUNCTION = %FALSE EXIT FUNCTION END IF IF ISTRUE(iNumerals) THEN ' flag "digits only" is set FOR iPos = 1 TO LEN(sResult) SELECT CASE AS LONG ASC(sResult, iPos) CASE < 48, > 57 iAgain = MSGBOX ("Numbers only, please", %MB_RETRYCANCEL OR %MB_ICONEXCLAMATION, " Invalid input!") SELECT CASE AS LONG iAgain CASE %IDRETRY sResult = "" ' reset result GOTO RETRY CASE %IDCANCEL FUNCTION = %FALSE EXIT FUNCTION END SELECT END SELECT NEXT END IF END FUNCTION FUNCTION PBMAIN() AS LONG LOCAL sResult AS STRING ' first test: input normal text, no predefined default IF ISTRUE iInputBox("Your name:", " 1st Test INPUTBOX$", sResult) THEN MSGBOX "You typed: " & sResult, 64, " 1st Test INPUTBOX$" ELSE EXIT FUNCTION END IF ' second test: numerals only, with default - all parameters passed IF ISTRUE iInputBox("Input a year", " 2nd Test INPUTBOX$", sResult, "2010", %TRUE) THEN MSGBOX "You typed: " & sResult, 64, " 2nd Test INPUTBOX$" ELSE EXIT FUNCTION END IF ' third test: numerals only, no default IF ISTRUE iInputBox("Input a number", " 3d Test INPUTBOX$", sResult, "", %TRUE) THEN MSGBOX "You typed: " & sResult, 64, " 3d Test INPUTBOX$" ELSE EXIT FUNCTION END IF END FUNCTION