Mic Posted January 24, 2014 Share Posted January 24, 2014 Is it possible to bind data to controls, where the displayed text of a button or label is grabbed from a variable or array and when that data changes the control is updated? tia. Link to comment Share on other sites More sharing options...
Solution jdelaney Posted January 24, 2014 Solution Share Posted January 24, 2014 (edited) You can look into an adlibregister, to continually check the text of the button vs the new text...change when required. Or, in your loop, do the checks: expandcollapse popupGlobal $iCounter = 0 Global $sButton1Prefix = "Button1Text" Global $sButton2Prefix = "Button2Text" Global $aButtons[2][2]=[[$sButton1Prefix & $iCounter,""],[$sButton2Prefix & $iCounter,""]] #include <GUIConstantsEx.au3> Example() Func Example() Local $msg $h = GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered Opt("GUICoordMode", 2) $aButtons[0][1] = GUICtrlCreateButton($aButtons[0][0], 10, 30, 100) $aButtons[1][1] = GUICtrlCreateButton($aButtons[1][0], 0, -1) GUISetState() ; will display an dialog box with 2 button ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop EndSelect Sleep(1000) $iCounter+=1 ; something chnages the array...just manually doing so now $aButtons[0][0] = $sButton1Prefix & $iCounter $aButtons[1][0] = $sButton2Prefix & $iCounter If Not (ControlGetText($h,"",$aButtons[0][1]) = $aButtons[0][0]) Then ControlSetText($h,"",$aButtons[0][1], $aButtons[0][0]) If Not (ControlGetText($h,"",$aButtons[1][1]) = $aButtons[1][0]) Then ControlSetText($h,"",$aButtons[1][1], $aButtons[1][0]) WEnd EndFunc ;==>Example adlibregister route: expandcollapse popupGlobal $iCounter = 0 Global $sButton1Prefix = "Button1Text" Global $sButton2Prefix = "Button2Text" Global $aButtons[2][2]=[[$sButton1Prefix & $iCounter,""],[$sButton2Prefix & $iCounter,""]] #include <GUIConstantsEx.au3> AdlibRegister("changebuttonArrayText",5000) AdlibRegister("checkbuttonTextagainstArray",200) Example() Func Example() Local $msg Global $h = GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered Opt("GUICoordMode", 2) $aButtons[0][1] = GUICtrlCreateButton($aButtons[0][0], 10, 30, 100) $aButtons[1][1] = GUICtrlCreateButton($aButtons[1][0], 0, -1) GUISetState() ; will display an dialog box with 2 button ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop EndSelect WEnd EndFunc ;==>Example Func changebuttonArrayText() $iCounter+=1 ; something chnages the array...just manually doing so now $aButtons[0][0] = $sButton1Prefix & $iCounter $aButtons[1][0] = $sButton2Prefix & $iCounter EndFunc Func checkbuttonTextagainstArray() ; something chnages the array...just manually doing so now If Not (ControlGetText($h,"",$aButtons[0][1]) = $aButtons[0][0]) Then ControlSetText($h,"",$aButtons[0][1], $aButtons[0][0]) If Not (ControlGetText($h,"",$aButtons[1][1]) = $aButtons[1][0]) Then ControlSetText($h,"",$aButtons[1][1], $aButtons[1][0]) EndFunc Edited January 24, 2014 by jdelaney Mic 1 IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window. Link to comment Share on other sites More sharing options...
Mic Posted January 24, 2014 Author Share Posted January 24, 2014 Ah I thought ... the manual method :-) .... but of course the "automatic" 2-way data binding in Flex ActionScript and ExtJS javascript just means that somebody has already written the code :-) Thanks for the info. Link to comment Share on other sites More sharing options...
kylomas Posted January 24, 2014 Share Posted January 24, 2014 Mic, An alternative... ; *** Start added by AutoIt3Wrapper *** #include <GUIConstantsEx.au3> #include <StaticConstants.au3> ; *** End added by AutoIt3Wrapper *** #AutoIt3Wrapper_Add_Constants=n local $aButtonText = [ _ 'My Button', _ 'Your Button', _ 'The Button', _ 'A Button', _ 'Button', _ 'What Button?'] local $gui010 = guicreate('Click the Button',250,50) local $aSize = wingetclientsize($gui010) local $btn010 = guictrlcreatebutton($aButtonText[random(0,ubound($aButtonText)-1,1)],20,$aSize[1]-40,$aSize[0]-40,20,$ss_sunken) guisetstate() local $sButtonSave = guictrlread($btn010) while 1 switch guigetmsg() case $gui_event_close Exit case $btn010 $sButtonSave = $aButtonText[random(0,ubound($aButtonText)-1,1)] while guictrlread($btn010) = $sButtonSave $sButtonSave = $aButtonText[random(0,ubound($aButtonText)-1,1)] wend guictrlsetdata($btn010,$sButtonSave) EndSwitch WEnd kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
kylomas Posted January 25, 2014 Share Posted January 25, 2014 Mic, Goofing around with the idea of "binding" a control to a variable... expandcollapse popup#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <array.au3> #AutoIt3Wrapper_Add_Constants=n local $aNames = ['Tom','Dick','Harry','Joe','Aggamemnon'] local $lbl010_text = 'My Label', $btn010_text = 'My Button', $chk010_text = 'My Checkbox', $ret local $gui010 = guicreate('Control Text Binder',300,300) local $lbl010 = guictrlcreatelabel('',20,20,200,20,bitor($ss_sunken,$ss_center)) local $btn010 = guictrlcreatebutton('',20,50,200,20) local $chk010 = GUICtrlCreateCheckbox('',20,80,200,20) guisetstate() local $aBinder = [['','']] _Bind($lbl010,'lbl010_text') _Bind($btn010,'btn010_text') _Bind($chk010,'chk010_text') adlibregister('Chk_Bind') while 1 switch guigetmsg() case $gui_event_close Exit EndSwitch assign($aBinder[random(0,ubound($aBinder) - 1,1)][1],$aNames[random(0,ubound($aNames) - 1,1)]) WEnd func _Bind($ctl,$str) if $aBinder[ubound($aBinder)-1][0] <> '' then redim $aBinder[ubound($aBinder)+1][2] $aBinder[ubound($aBinder) - 1][0] = $ctl $aBinder[ubound($aBinder) - 1][1] = $str endfunc func Chk_Bind() for $1 = 0 to ubound($aBinder) - 1 if guictrlread($aBinder[$1][0]) = eval($aBinder[$1][1]) then ContinueLoop guictrlsetdata($aBinder[$1][0],eval($aBinder[$1][1])) next endfunc kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill 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