Tekki Posted August 23, 2009 Posted August 23, 2009 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; expandcollapse popup#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]
Moderators Melba23 Posted August 23, 2009 Moderators Posted August 23, 2009 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:expandcollapse popup#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 EndFuncYou 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 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
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