electrogen Posted May 14, 2012 Share Posted May 14, 2012 (edited) Hi, Im just wondering if it is possible to have functions within functions. I have made a func that contains a child gui, and the child also has buttons and inputs on it which are to be called via functions.I have tried a few ways to call them funcs but the syntax check keeps coming up with errors.Also is there a way to unhighlight check boxes after selection.I made a dialog with 36 check boxes and a radio button to select them all if i needed.I used the Case expression to call a function to select them all but cant figure how to deselect them if i pressed the select all control A second time.Also how would i loop this. Edited May 14, 2012 by electrogen Link to comment Share on other sites More sharing options...
water Posted May 14, 2012 Share Posted May 14, 2012 (edited) Functions within functions is not possible. Func xy Func abc EndFunc EndFuncdoesn't work. You have to useFunc xy EndFunc Func abc EndFunc Edited May 14, 2012 by water My UDFs and Tutorials: Spoiler UDFs:Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsOutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - DownloadOutlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - WikiPowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - WikiTask Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs:Excel - Example Scripts - WikiWord - Wiki Tutorials:ADO - WikiWebDriver - Wiki Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 14, 2012 Moderators Share Posted May 14, 2012 electrogen,You can certainly call functions from within other functions. What you cannot do is to define functions within other functions - each Func/EndFunc section must be distinct. Perhaps posting your script might help us to offer further help. As to your second question, Radio controls can only be selected, you cannot "deselect" them. I suggest using a checkbox like this:#include <GUIConstantsEx.au3> $hGUI = GUICreate("Test", 500, 500) $cStart = GUICtrlCreateDummy() For $i = 1 To 10 GUICtrlCreateCheckbox("Check " & $i, 10, 20 * $i, 200, 20) Next $cEnd = GUICtrlCreateDummy() $cRadio = GUICtrlCreateCheckbox("Select All", 250, 20, 200, 20) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $cRadio Switch GUICtrlRead($cRadio) Case 1 $iState = $GUI_CHECKED Case Else $iState = $GUI_UNCHECKED EndSwitch For $i = $cStart To $cEnd GUICtrlSetState($i, $iState) Next EndSwitch WEndAll clear? 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...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 electrogen, You can certainly call functions from within other functions. What you cannot do is to define functions within other functions - each Func/EndFunc section must be distinct. Perhaps posting your script might help us to offer further help. As to your second question, Radio controls can only be selected, you cannot "deselect" them. I suggest using a checkbox like this: #include <GUIConstantsEx.au3> $hGUI = GUICreate("Test", 500, 500) $cStart = GUICtrlCreateDummy() For $i = 1 To 10 GUICtrlCreateCheckbox("Check " & $i, 10, 20 * $i, 200, 20) Next $cEnd = GUICtrlCreateDummy() $cRadio = GUICtrlCreateCheckbox("Select All", 250, 20, 200, 20) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $cRadio Switch GUICtrlRead($cRadio) Case 1 $iState = $GUI_CHECKED Case Else $iState = $GUI_UNCHECKED EndSwitch For $i = $cStart To $cEnd GUICtrlSetState($i, $iState) Next EndSwitch WEnd All clear? M23 Sorry i meant to put checkboxes i have edited my post now. They are checkboxes Link to comment Share on other sites More sharing options...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 (edited) Here is my code. It is long. expandcollapse popup Edited May 14, 2012 by electrogen Link to comment Share on other sites More sharing options... Moderators Melba23 Posted May 14, 2012 Melba23 Moderators 31.1k 477 I'm old, what's your excuse? Moderators Share Posted May 14, 2012 electrogen,One thing that jumps out immediately is this section in Func InjectOptionYes. You cannot use both modes in the same script at the same time:GUICtrlSetOnEvent($WimImageButton, WIMButton()) While 1 $Msg = GUIGetMsg() Switch $MsgWas it the WIMButton function that was not working? You need to add the $WimImageButton control to the GUIGetMsg Switch structure and call teh function when it fires. 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...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 No actually when i check the syntax it is fine no errors. But when i test the GUI as soon as that func is called the gui starts behaving strange. Link to comment Share on other sites More sharing options...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 electrogen,One thing that jumps out immediately is this section in Func InjectOptionYes. You cannot use both modes in the same script at the same time:I thought you couldnt but i also thought that the code is read from top to bottom so cant go back to the top again Link to comment Share on other sites More sharing options...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 There is also a problem as there is essentially 2 gui's. There is a switch for the main gui as below. Switch $Msg Case $GUI_EVENT_CLOSE Exit but also there is a child gui that when i close buth gui closes Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 14, 2012 Moderators Share Posted May 14, 2012 electrogen,Syntax might be fine but I repeat, you cannot use both OnEvent and MessageLoop modes simultaneously. However, your GUI is acting funny because you never leave the child GUI loop. Make the final loop something like this:While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE GUICtrlSetState($InjectOptionNo, $GUI_CHECKED) ExitLoop Case $WimImageButton WIMButton() ExitLoop EndSwitch WEnd GUISetState(@SW_SHOW, $ParentGUI) GUIDelete($hChild) EndFunc ;==>InjectOptionYesNow I can open and close the child without problem. 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...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 electrogen, Syntax might be fine but I repeat, you cannot use both OnEvent and MessageLoop modes simultaneously. However, your GUI is acting funny because you never leave the child GUI loop. Make the final loop something like this: While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE GUICtrlSetState($InjectOptionNo, $GUI_CHECKED) ExitLoop Case $WimImageButton WIMButton() ExitLoop EndSwitch WEnd GUISetState(@SW_SHOW, $ParentGUI) GUIDelete($hChild) EndFunc ;==>InjectOptionYes Now I can open and close the child without problem. M23 Cheers ill give it a try Link to comment Share on other sites More sharing options...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 Iv'e lost my trail of thought about it so i will just do it a different way. With a hidden tab that is activated instead. COuld i also ask what the dummy gui is for? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 14, 2012 Moderators Share Posted May 14, 2012 electrogen,I assume you mean the dummy controls I created with GUICtrlCreateDummy rather than a "dummy GUI". I used them to delimit the controlIDs of the Checkboxes so that I could loop through them to check/uncheck all. To be absolutely correct I should have saved the ControlIDs in an array and then looped through the array - but if you create controls in immediate succession and have not deleted any controls create dearlier, you can cheat a bit and use the trick as shown in that script. 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...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 Can that work aswell instead of me deleting the modules tab. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 14, 2012 Moderators Share Posted May 14, 2012 electrogen, Sorry, but I have no idea what you mean by that. 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...
electrogen Posted May 14, 2012 Author Share Posted May 14, 2012 electrogen, Sorry, but I have no idea what you mean by that. M23 I use GUICtrlDelete to delete the tabs so they cant be used if the other tab is selected Func Languages() GUICtrlDelete ($ModulesTab) GUICtrlSetState($LPRadio, $GUI_CHECKED) EndFunc Func Inject () GUICtrlDelete ($ModulesTab) GUICtrlDelete ($LanguagesTab) GUICtrlSetState($LPRadio, $GUI_CHECKED) EndFunc 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