Jump to content

Recommended Posts

Posted

Hello,

My struggle to work out a custom pop-up window is in vain. I want to build a GUI which provides a window that is hidden for a certain interval of time and then pops-up to remind the user a repetitive activity. The user should be able to acknowledge the message unless he ignores the pop-up so its time-out will hide it again to resume the cycle. All seams to be sorted out excepting the loop which hides and shows the pop-up after initial start. Trying to enclose it in a logical loop seems to mess up the timers and to brake the GUIGetMsg() function, so there is no control over GUI.

Here is the code:

#include <GUIConstantsEx.au3>
#include <Timers.au3>

Local $OK, $Exit, $msg

$hGUI = GUICreate("Vision Saver", 190, 65)
GUICtrlCreateLabel("It's time for a brake!", 10, 10)
$OK = GUICtrlCreateButton("OK", 10, 30, 80, 20)
GuiCtrlSetState (-1, 512)
$Exit = GUICtrlCreateButton("Exit", 100, 30, 80, 20)

GUISetState() ; Initial display

While 1
   $msg = GUIGetMsg()
   Switch $msg
      Case $OK
            GUISetState(@SW_HIDE)
            Sleep(5000)
            GUISetState(@SW_SHOW) ;First popup after delay;
            _Timer_SetTimer($hGUI, 2000, "Autohide", -1) ;Set timeout if user do not interfere
            ;Placehlder for the loop
      Case $Exit
            GUIDelete()
            Exit
      Case $GUI_EVENT_CLOSE
            GUIDelete()
            Exit
   EndSwitch
WEnd

Func Autohide($hWnd, $Msg, $iIDTimer, $dwTime)
   GUISetState(@SW_HIDE)
EndFunc

Anybody could help me, please?

Thank you in advance.

  • Moderators
Posted

rowish,

You are overcomplicating things: ;)

; Set a timestamp
$iBegin = TimerInit()

While 1
    ; Has enough time passed?
    If TimerDiff($iBegin) > 5000 Then ; Currently set to 5 secs for testing
        ; Reset the timestamp
        $iBegin = TimerInit()
        ; Show the dialog
        MsgBox(0, "Vision Saver", "Time for a break", 2) ; Times out after 2 secs
    EndIf
WEnd

Please ask if you have any questions. :)

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

 

Posted

This script will show the GUI every 10 seconds, and if not acted on will hide it in 2 seconds. I have included 2 ways of doing it, the current way uses one function to show and hide the GUI, but I've also included a way to do it with 2 separate functions that set each other. This uses the Adlib functions to do the timing.

The reason I included the 2 function version as well is in case you want to do something else other than just hiding/showing the GUI while this is running.

#include <GUIConstantsEx.au3>
;~ Comment out the following line, and uncomment the line after it for the 2 function method
AdlibRegister("AutoShowHide", 10000) ; sets timer so the GUI shows every 10 seconds
;~ AdlibRegister("AutoShow", 10000) ; sets timer so the GUI shows every 10 seconds
Local $OK, $Exit, $msg

$hGUI = GUICreate("Vision Saver", 190, 65)
GUICtrlCreateLabel("It's time for a break!", 10, 10)
$OK = GUICtrlCreateButton("OK", 10, 30, 80, 20)
GUICtrlSetState(-1, 512)
$Exit = GUICtrlCreateButton("Exit", 100, 30, 80, 20)
While 1
     $msg = GUIGetMsg()
     Switch $msg
          Case $OK
               ;~ Comment out the following line, and uncomment the line after it for the 2 function method
               Autoshowhide() ; hides the GUI
;~                AutoHide()
          Case $Exit, $GUI_EVENT_CLOSE
               GUIDelete()
               Exit
     EndSwitch
WEnd
;~ Uncomment the following 2 functions if using the 2 function method
;~ Func Autohide()
;~      AdlibUnRegister("AutoHide") ; Unregisters the AutoHide timer
;~      GUISetState(@SW_HIDE)
;~      AdlibRegister("AutoShow", 10000) ; Reregisters the AutoShow timer
;~ EndFunc   ;==>Autohide
;~ Func AutoShow()
;~      AdlibUnRegister("AutoShow") ; Unregisters the AutoShow timer
;~      GUISetState(@SW_SHOW)
;~      AdlibRegister("AutoHide", 2000) ; Registers the AutoHide timer, set to 2 seconds
;~ EndFunc   ;==>AutoShow
;~ You can comment out the following function if using the 2 function method, but not really needed
;~ because it won't be used if you followed the instructions above.
Func AutoShowHide()
     Local Static $Toggle
     $Toggle = Not $Toggle
     If $Toggle Then
          GUISetState(@SW_SHOW)
          AdlibRegister("AutoShowHide", 2000) ; Resets the AutoShowHide timer to 2 seconds
     Else
          GUISetState(@SW_HIDE)
          AdlibRegister("AutoShowHide", 10000) ; Resets the AutoShowHide timer to 10 seconds
     EndIf
EndFunc   ;==>AutoShowHide

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

  • Moderators
Posted

rowish,

Glad we could help. :)

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

 

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