Sign in to follow this  
Followers 0
Tekki

How to close a gui box

2 posts in this topic

How would I get a Gui Box using OnEvent to close the box after someone clicks on a button?

If you want to see the script;

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $ExitID
HotKeySet("{ESC}", "finished")

MsgBox(0, "", "At ANY time press ESC key to exit script" & @CRLF & "exiting script ALSO cancels the shutdown timer!")
_Main()

Func _Main()
    Local $CustomID, $PresetID

    GUICreate("Shutdown timer", 210, 80)

    GUICtrlCreateLabel("Please click a button!", 10, 10)
    $CustomID = GUICtrlCreateButton("Custom", 10, 50, 50, 20)
    GUICtrlSetOnEvent($CustomID, "OnCustom")
    $PresetID = GUICtrlCreateButton("Presets", 80, 50, 50, 20)
    GUICtrlSetOnEvent($PresetID, "OnPresets")
    $ExitID = GUICtrlCreateButton("Exit", 150, 50, 50, 20)
    GUICtrlSetOnEvent($ExitID, "OnExit")

    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

    GUISetState() ; display the GUI

    While 1
        Sleep(1000)
    WEnd
EndFunc   ;==>_Main

;--------------- Functions ---------------
Func OnCustom()

    $time = InputBox("", "Shut down in how many minutes?") ; asks how many minutes to wait
    If @error = 1 Then Exit ; cancel button

    $time = $time * 60 * 1000 ; transfers minutes to milliseconds
    Sleep($time) ; pause script until user imput's time is reached
    MsgBox(0, "", "Two seconds remaining!", 2) ; Notify of shutdown, 2 seconds till shutdown
    Shutdown(4) ; FORCE shutdown

EndFunc   ;==>OnCustom

Func OnPresets()
    Local $HourID, $30MinID, $Two, $ExitID1

    GUICreate("Presets", 210, 80)

    GUICtrlCreateLabel("Please click a button!", 10, 10)
    $30MinID = GUICtrlCreateButton("30 min", 10, 50, 50, 20)
    GUICtrlSetOnEvent($30MinID, "Minute")
    $HourID = GUICtrlCreateButton("Hour", 80, 50, 50, 20)
    GUICtrlSetOnEvent($HourID, "Hour")
    $Two = GUICtrlCreateButton("Two hrs", 150, 50, 50, 20)
    GUICtrlSetOnEvent($Two, "Two")
    $ExitID = GUICtrlCreateButton("Exit", 230, 50, 50, 20)
    GUICtrlSetOnEvent($ExitID1, "OnExit")

    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

    GUISetState() ; display the for presets GUI

    While 1
        Sleep(1000)
    WEnd
EndFunc   ;==>OnPresets

Func Minute()
    Local $min
    $min = 30 * 60 * 1000
    Sleep($min)
    Shutdown(4)
EndFunc   ;==>Minute

Func Hour()
    Local $hour
    $hour = 60 * 60 * 1000
    Sleep($hour)
    Shutdown(4)
EndFunc   ;==>Hour

Func Two()
    Local $Twoh
    $Twoh = 120 * 60 * 1000
    Sleep($Twoh)
    Shutdown(4)
EndFunc   ;==>Two

Func Exit2()
    Exit
EndFunc   ;==>Exit2


Func OnExit()
    Local $ExitID1
    If @GUI_CtrlId = $ExitID1 Then Exit
EndFunc   ;==>OnExit

Func finished()
    Exit
    Exit
EndFunc   ;==>finished

I have a feeling it is really simple but I am having a hard time. Thanks in advance


If you intend to use Sarcasm you must this sticker!!![size="1"][sub]pic made by manadar[/sub][/size]

Share this post


Link to post
Share on other sites



Tekki,

In your OnExit function, you declare $ExitID1 as a Local variable and leave it undefined. @GUI_CtrlID will, by definition, be the ControlID of the control that got you into the function, so the If statement will never be true and so you will never exit!

As you do not care which control got you to the OnExit function, the contents can be as simple as "Exit". Look at this code:

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $ExitID
HotKeySet("{ESC}", "OnExit") ; <<<<<<<<<<<< Normal exit function

MsgBox(0, "", "At ANY time press ESC key to exit script" & @CRLF & "exiting script ALSO cancels the shutdown timer!")
_Main()

Func _Main()
    Local $CustomID, $PresetID

    GUICreate("Shutdown timer", 210, 80)

    GUICtrlCreateLabel("Please click a button!", 10, 10)
    $CustomID = GUICtrlCreateButton("Custom", 10, 50, 50, 20)
    GUICtrlSetOnEvent($CustomID, "OnCustom")
    $PresetID = GUICtrlCreateButton("Presets", 80, 50, 50, 20)
    GUICtrlSetOnEvent($PresetID, "OnPresets")
    $ExitID = GUICtrlCreateButton("Exit", 150, 50, 50, 20)
    GUICtrlSetOnEvent($ExitID, "OnExit")

    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

    GUISetState() ; display the GUI

    While 1
        Sleep(1000) ; <<<<<<<<<<<<<<<<< 1000 is too long - 10 will do
    WEnd
EndFunc   ;==>_Main

;--------------- Functions ---------------
Func OnCustom()

    Local $time = InputBox("", "Shut down in how many minutes?") ; asks how many minutes to wait
    If @error = 1 Then Exit ; cancel button

    $time = $time * 60 * 1000 ; transfers minutes to milliseconds
    Sleep($time) ; pause script until user imput's time is reached
    MsgBox(0, "", "Two seconds remaining!", 2) ; Notify of shutdown, 2 seconds till shutdown
    Shutdown(4) ; FORCE shutdown

EndFunc   ;==>OnCustom

Func OnPresets()
    Local $HourID, $30MinID, $Two, $ExitID1

    GUICreate("Presets", 210, 80)

    GUICtrlCreateLabel("Please click a button!", 10, 10)
    $30MinID = GUICtrlCreateButton("30 min", 10, 50, 50, 20)
    GUICtrlSetOnEvent($30MinID, "Minute")
    $HourID = GUICtrlCreateButton("Hour", 80, 50, 50, 20)
    GUICtrlSetOnEvent($HourID, "Hour")
    $Two = GUICtrlCreateButton("Two hrs", 150, 50, 50, 20)
    GUICtrlSetOnEvent($Two, "Two")
    $ExitID = GUICtrlCreateButton("Exit", 230, 50, 50, 20)
    GUICtrlSetOnEvent($ExitID1, "OnExit")

    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

    GUISetState() ; display the for presets GUI

    While 1
        Sleep(1000)
    WEnd
EndFunc   ;==>OnPresets

Func Minute()
    Local $min
    $min = 30 * 60 * 1000
    Sleep($min)
    Shutdown(4)
EndFunc   ;==>Minute

Func Hour()
    Local $hour
    $hour = 60 * 60 * 1000
    Sleep($hour)
    Shutdown(4)
EndFunc   ;==>Hour

Func Two()
    Local $Twoh
    $Twoh = 120 * 60 * 1000
    Sleep($Twoh)
    Shutdown(4)
EndFunc   ;==>Two

Func OnExit()
    Exit
EndFunc

You also can use the same function for the ESC HotKey. Note that I have reduced the size of the Sleep function in your loop - Sleep(10) is quite adequate, Sleep(100) probably as high as you would want to go. Anything higher and you risk making the script unresponsive. Finally, you need to declare $time as a Local variable in your OnCustom function.

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

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