Jump to content

Recommended Posts

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 by electrogen
Link to post
Share on other sites

Functions within functions is not possible.

Func xy
  Func abc
  EndFunc
EndFunc
doesn't work. You have to use
Func xy
EndFunc
Func abc
EndFunc
Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2021-06-05 - Version 1.5.4.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2021-06-14 - Version 1.6.5.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Link to post
Share on other sites
  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to post
Share on other sites

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 post
Share on other sites

Here is my code. It is long.



            
                


    Edited  by electrogen
    
    

            
        

        

        
    

    

    
        Link to post
        
            
        
        
        

        
            Share on other sites
            

    
        
            

    

        
            

    

        
            

    

        
            

    

        
    

        
    

    

                    
                    
                    
                

                    

                    
                    






    

    
        
            
                
                    Moderators
                
                
                
                
            
        
    

    
        
            


    
        
    

            
            
            
        
        
            
                

Melba23
                

    
        
    
             3,552
    
        
    

            
            
                Posted 
                
            
        
    
    
        

Melba23

        
            
                I'm old, what's your excuse?
            
            

            
                


    
        
    

                
                
                
            
            Moderators
            
                
            
            
                
                    

    
        
    
             3,552
    
        
    

                    
                         

     437


                    
                
                30,341 posts

                
                

            
        
    
    
        



    
        
            
                
                    
                    
                        Moderators
                    
                    
                    
                    
                
            
            
                
                    
                    
                        
                        
                            Share
                        
                        
                        
                        
                            
                                
                            
                            
                            
                            
                            
                            
                        
                    
                
                
            
        

        
            Posted  
            
            
                
                
            
        
    

    


    
        
        
            
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 $Msg

Was 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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to post
Share on other sites

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 post
Share on other sites
  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to post
Share on other sites

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 post
Share on other sites
  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to post
Share on other sites
  • Moderators

electrogen,

Sorry, but I have no idea what you mean by that. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to post
Share on other sites

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 post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...