Sign in to follow this  
Followers 0
electrogen

Couple of questions

16 posts in this topic

#1 ·  Posted (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 by electrogen

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

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 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


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


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______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

 

Share this post


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

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

Here is my code. It is long.



            
                


    Edited  by electrogen
    
    

            
        

        
            
                

    
        
            
        
    


            
        

        
            
                
                
                
            
            
                
            
        
        
    

    
        
            Share this post
            
Link to post
            
            
            

            
                Share on other sites
                

    
        
            

    

        
            

    

        
            

    

        
            

    

        
    

            
        
    


    

                    
                
                    
                    
                    






    
    
        
Melba23   

    
        
    
             2,531
    
        
    

        
            
                Soy viejo, ¿cuál es tu excusa?
            
            

            
                

    
        
    

            
            Moderators
            
                
            
            
                

    
        
    
             2,531
    
        
    

                27,873 posts
                
                

            
        
    
    
        


    

    
        
            
            
                
            
            
        

        
    #6 · 
            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


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______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

 

Share this post


Link to post
Share on other sites

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.

Share this post


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

Share this post


Link to post
Share on other sites

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

Share this post


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


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______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

 

Share this post


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

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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._______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

 

Share this post


Link to post
Share on other sites

Can that work aswell instead of me deleting the modules tab.

Share this post


Link to post
Share on other sites

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._______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

 

Share this post


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

Share this post


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
Sign in to follow this  
Followers 0