fett8802 Posted July 6, 2010 Share Posted July 6, 2010 (edited) Hello! First time post. I'm using AutoIt pretty extensively to help automate a lot of electronic testing at my job. So far, a co-worker of mine has been able to help me when it came to problematic scripts; but now neither of us can figure this one out. I don't have any example code, because almost all of the code could be considered proprietary; so I'll just have to explain what I'm trying to accomplish. I have a GUI with many inputs - text boxes, combo boxes, IP boxes, etc. I'm writing the GUI script in such a way that the "Begin Test" button won't activate until all inputs are correct - so that you can't accidentally leave out an important IP or something. (These tests are being designed to run by themselves and spit information out over a weekend or weeks at a time. So if anything is input incorrectly, it won't be noticed for a long time.) So here's what I need. When I input text into the GUICtrlCreateInput, I need for it to call a function. (When I tab off or click away from the control) letting another set of variables know that information has been typed. That way, when all GUICtrlCreateInput boxes contain text, you can continue on in the process of the test. Any ideas would be an incredible help! Thanks so much! -Kris Edited December 6, 2010 by fett8802 [sub]My UDF[/sub][sub] - Basics and Time extensions. Great for those new at AutoIt, also contains some powerful time extensions for pros.[/sub][sub]ScrabbleIt[/sub][sub] - Scrabble done in pure AutoIt. (In Progress)[/sub][sub]Nerd Party Extreme | My Portfolio | [email="fett8802@gmail.com"]Contact Me[/email][/sub] Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 6, 2010 Moderators Share Posted July 6, 2010 fett8802, Welcome to the AutoIt forum. One way to do what you want would be to store the ControlIDs of the inputs into an array and then loop through the array to make sure that the inputs held something. Take a look at this: #include <GUIConstantsEx.au3> Global $aInput_ID[3] $hGUI = GUICreate("Test", 500, 500) $aInput_ID[0] = GUICtrlCreateInput("", 10, 10, 480, 20) $aInput_ID[1] = GUICtrlCreateInput("", 10, 50, 480, 20) $aInput_ID[2] = GUICtrlCreateInput("", 10, 90, 480, 20) $hButton = GUICtrlCreateButton("Test", 10, 150, 80, 30) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $hButton $fError = False For $i = 0 To UBound($aInput_ID) - 1 If GUICtrlRead($aInput_ID[$i]) = "" Then MsgBox(0, "", "Please enter some text into Input " & $i) $fError = True EndIf Next If Not $fError Then MsgBox(0, "", "Off and running!") EndIf EndSwitch WEnd If you wanted to get even fancier, you could check that what they held was reasonably valid, but that comes later. Does that help? M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
fett8802 Posted July 6, 2010 Author Share Posted July 6, 2010 (edited) As far as making sure that the program will not continue without text input, yes. Thank you very much! The reason I wanted it to check as you were going was that I've got a kind of progress bar that let's the user know how much more stuff needs entered before the program will allow you to continue. So, once the bar is full, you are good to go. So, as I type into an input box and tab or click to another, the progress bar would update the appropriate amount. Thanks so much for your help! I'm sorry I couldn't be any more clear. -Kris EDIT: I found this script elsewhere on the site and was attempting to adapt it to my needs. I was having a bad time of it. #include<WindowsConstants.au3> ; For $WM_COMMAND #include<WinApi.au3> ; For _WinApi_HiWord and LoWord #include<EditConstants.au3> ; for $EN_KILLFOCUS ; The variables are needed in functions too... Global $hEdit1, $hEdit2 GUICreate("This is a test", 400, 200) $hEdit1 = GUICtrlCreateInput("", 2, 2, 396, 20) $hEdit2 = GUICtrlCreateInput("", 2, 24, 396, 20) GUISetState() GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; Register the message While GUIGetMsg() <> -3 ; Wait for close Sleep(10) WEnd Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) If _WinAPI_HiWord($iwParam) = $EN_KILLFOCUS Then ; An edit ctrl has lost focus Switch _WinAPI_LoWord($iwParam) Case $hEdit1 ConsoleWrite("Edit 1 has lost focus" & @CRLF) Case $hEdit2 ConsoleWrite("Edit 2 has lost focus" & @CRLF) EndSwitch EndIf EndFunc ;==>WM_COMMAND Edited July 6, 2010 by fett8802 [sub]My UDF[/sub][sub] - Basics and Time extensions. Great for those new at AutoIt, also contains some powerful time extensions for pros.[/sub][sub]ScrabbleIt[/sub][sub] - Scrabble done in pure AutoIt. (In Progress)[/sub][sub]Nerd Party Extreme | My Portfolio | [email="fett8802@gmail.com"]Contact Me[/email][/sub] Link to comment Share on other sites More sharing options...
Yoriz Posted July 6, 2010 Share Posted July 6, 2010 (edited) This is a bit slapped together hope it helps. expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Opt("MustDeclareVars", 1) Global $hWndChanged _GUI() Func _GUI() #Region ### START Koda GUI section ### Form= Local $Form1 = GUICreate("Form1", 161, 139, -1, -1) Local $sInputs = GUICtrlCreateInput("", 8, 8, 121, 21) Local $sLabels = GUICtrlCreateLabel("r", 136, 8, 16, 21, $SS_CENTER) GUICtrlSetFont(-1, 12, 400, 0, "Webdings") $sInputs &= "|" & GUICtrlCreateInput("", 8, 40, 121, 21) $sLabels &= "|" & GUICtrlCreateLabel("r", 136, 40, 16, 21, $SS_CENTER) GUICtrlSetFont(-1, 12, 400, 0, "Webdings") $sInputs &= "|" & GUICtrlCreateInput("", 8, 72, 121, 21) $sLabels &= "|" & GUICtrlCreateLabel("r", 136, 72, 16, 21, $SS_CENTER) GUICtrlSetFont(-1, 12, 400, 0, "Webdings") Local $hButton1 = GUICtrlCreateButton("Button1", 40, 104, 75, 25) GUICtrlSetState(-1, $GUI_DISABLE) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Local $aInputs = StringSplit($sInputs, "|") Local $aLabels = StringSplit($sLabels, "|") Local $sAllowedIn1 = "One|1" Local $sAllowedIn2 = "Two|2" Local $sAllowedIn3 = "Three|3" Local $aAllowed[4] = [0, $sAllowedIn1, $sAllowedIn2, $sAllowedIn3] GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") While 1 Local $nMsg = GUIGetMsg() Select Case $nMsg = $GUI_EVENT_CLOSE Exit Case $hWndChanged For $i = 1 To $aInputs[0] Step 1 If GUICtrlGetHandle($aInputs[$i]) = $hWndChanged Then ExitLoop Next Local $sRead = GUICtrlRead($aInputs[$i]) Local $aCheckfor = StringSplit($aAllowed[$i], "|") Local $fOk = False For $i2 = 1 To $aCheckfor[0] Step 1 If $sRead = $aCheckfor[$i2] Then $fOk = True Next If $fOk Then GUICtrlSetData($aLabels[$i], "a") Else GUICtrlSetData($aLabels[$i], "r") EndIf $hWndChanged = "" Case Else Local $fAllChecked = True For $i = 1 To $aLabels[0] Step 1 If GUICtrlRead($aLabels[$i]) = "r" Then $fAllChecked = False Next If $fAllChecked Then If BitAND(GUICtrlGetState($hButton1), $GUI_DISABLE) Then GUICtrlSetState($hButton1, $GUI_ENABLE) Else If BitAND(GUICtrlGetState($hButton1), $GUI_ENABLE) Then GUICtrlSetState($hButton1, $GUI_DISABLE) EndIf EndSelect WEnd EndFunc ;==>_GUI Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) Local $hWndFrom = $ilParam Local $nNotifyCode = BitShift($iwParam, 16) Switch $nNotifyCode Case $EN_CHANGE $hWndChanged = $hWndFrom EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND edit : i should explain that ive made it tick input one if it contains "One" or "1" change $sAllowedIn1 to suit, each input has its own $sAllowedIn that is a string with a delimeter of "|" , only once all are ticked will the button be enabled. Edited July 6, 2010 by Yoriz GDIPlusDispose - A modified version of GDIPlus that auto disposes of its own objects before shutdown of the Dll using the same function Syntax as the original.EzMySql UDF - Use MySql Databases with autoit with syntax similar to SQLite UDF. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now