Jump to content
Sign in to follow this  
XiaolinDraconis

Controls not keeping previous settings

Recommended Posts

XiaolinDraconis

Don't see why it won't keep the settings when Options() gets called, keeps reverting to unchecked radios and slider at 100 of 255. It should be reading the INI for those values each time it's called.

#NoTrayIcon
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <TrayConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt("TrayMenuMode", 3) ; The default tray menu items will not be shown and items are not checked when selected. These are options 1 and 2 for TrayMenuMode.
Opt("TrayOnEventMode", 1) ; Enable TrayOnEventMode.

HotKeySet("^{SPACE}", "TapTimer")

If FileExists(".\OTPT.ini") Then
    Sleep(1000)
Else
    IniWrite("OTPT.ini", "AOT", "True", "1" & @CRLF)
    IniWrite("OTPT.ini", "Transparency", "Value", "204" & @CRLF & @CRLF & "Max Transparency Value = 255")
EndIf

$Toggle = 0
$AOT = IniRead("OTPT.ini", "AOT", "True", "1")
$Transparency = IniRead("OTPT.ini", "Transparency", "Value", "204")


TrayMenu()

Func TrayMenu()
    TrayCreateItem("Settings")
    TrayItemSetOnEvent(-1, "Options")

    TrayCreateItem("About")
    TrayItemSetOnEvent(-1, "About")

    TrayCreateItem("") ; Create a separator line.

    TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1, "ExitScript")

    TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "Options") ; Display the About MsgBox when the tray icon is double clicked on with the primary mouse button.

    TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu.
EndFunc   ;==>TrayMenu

While 1
    Sleep(100) ; An idle loop.
WEnd

Func TapTimer()
    HotKeySet("^{SPACE}")
    $TapTime = 0
    While _IsPressed("20")
        Sleep(1000)
        $TapTime += 1
    WEnd
    If $TapTime < 3 Then
        OnTop()
        Sleep(500)
    Else
        Options()
        Sleep(500)
    EndIf
    HotKeySet("^{SPACE}", "TapTimer")
EndFunc   ;==>TapTimer

Func Options()

    $Form1 = GUICreate("Settings", 290, 142)
    $Radio1 = GUICtrlCreateRadio("", 119, 32, 17, 17)
    If $AOT = 1 Then
        GUICtrlSetData($Radio1, $GUI_CHECKED, $GUI_CHECKED)
    Else
        GUICtrlSetData($Radio1, $GUI_UNCHECKED, $GUI_UNCHECKED)
    EndIf
    $Radio2 = GUICtrlCreateRadio("", 168, 32, 17, 17)
    $Label1 = GUICtrlCreateLabel("ON", 96, 32, 20, 17)
    $Label2 = GUICtrlCreateLabel("OFF", 142, 30, 24, 17)
    $Slider = GUICtrlCreateSlider(13, 72, 255, 25)
    GUICtrlSetData(-1, $Transparency)
    GUICtrlSetLimit(-1, 255, 0)
    $Label3 = GUICtrlCreateLabel("-", 8, 72, 15, 17)
    $Label4 = GUICtrlCreateLabel("+", 269, 70, 10, 17)
    $Label5 = GUICtrlCreateLabel("Always On Top", 102, 3, 89, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label6 = GUICtrlCreateLabel("Transparency", 106, 56, 81, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $OK = GUICtrlCreateButton("OK", 128, 104, 33, 33)
    GUISetState(@SW_SHOW)
    WinSetOnTop("Settings", "", 1)

    While 1
        WinActivate("Settings")
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                GUISetState(@SW_HIDE)
                ExitLoop
            Case $OK
                While GUICtrlRead($Radio1) = $GUI_UNCHECKED And GUICtrlRead($Radio2) = $GUI_UNCHECKED
                    Sleep(100)
                    ToolTip("Please Select ON/OFF State")
                    WinActivate("Settings")
                WEnd
                If GUICtrlGetState($Radio1) = $GUI_CHECKED Then
                    $AOT = 1
                    $Transparency = GUICtrlRead($Slider)
                Else
                    $AOT = 0
                    $Transparency = GUICtrlRead($Slider)
                EndIf
                IniWrite("OTPT.ini", "AOT", "True", $AOT)
                IniWrite("OTPT.ini", "Transparency", "Value", $Transparency)
                ToolTip("")
                GUISetState(@SW_HIDE)
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>Options

Func About()
    MsgBox($MB_OK, "About", "OnTopPeekThrough" & @CRLF & @CRLF & _
            "Press CTRL+SPACE to toggle" & @CRLF & _
            "Or hold 3 seconds for Options" & @CRLF & @CRLF & _
            "By: XiaolinDraconis")
EndFunc   ;==>About

Func OnTop()
    If $Toggle = 0 Then
        $Toggle = 1
        Set()
    Else
        $Toggle = 0
        Unset()
    EndIf
EndFunc   ;==>OnTop

Func Set()
    $WinTitle = WinGetTitle("[active]")
    WinSetOnTop($WinTitle, "", 1)
    WinSetTrans($WinTitle, "", $Transparency)
EndFunc   ;==>Set

Func Unset()
    $WinTitle = WinGetTitle("[active]")
    WinSetOnTop($WinTitle, "", 0)
    WinSetTrans($WinTitle, "", 255)
EndFunc   ;==>Unset

Func ExitScript()
    Exit
EndFunc   ;==>ExitScript

Share this post


Link to post
Share on other sites
XiaolinDraconis

Managed to fix the slider. Now working on radio buttons.

Share this post


Link to post
Share on other sites
XiaolinDraconis

apparently i didnt entirely fix it.

Share this post


Link to post
Share on other sites
mpower

apparently i didnt entirely fix it.

Try: 

If $AOT = 1 Then
        GUICtrlSetState($Radio1, $GUI_CHECKED)
    Else
        GUICtrlSetState($Radio1, $GUI_UNCHECKED)
    EndIf

Edit: A more elegant way to handle having a Tray menu and a GUI would be to have a single While loop where you listen for messages from Tray and from the GUI and handle it that way:

P.S. I fixed the issues you were having with the ini not updating and also added a label to the Transparency slider to show the selected number.

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Opt("TrayMenuMode", 3)
HotKeySet("^{SPACE}", "TapTimer")

Global $inifile = @ScriptDir & "\OTPT.ini", $transparency = 204, $AOT = 1, $Toggle = 0

If FileExists($inifile) Then
    $AOT = IniRead($inifile, "AOT", "True", "1")
    $transparency = IniRead($inifile, "Transparency", "Value", "204")
Else
    IniWrite($inifile, "AOT", "True", $AOT & @CRLF)
    IniWrite($inifile, "Transparency", "Value", $transparency & @CRLF & @CRLF & "Max Transparency Value = 255")
EndIf

#Region ### START $optionsGUI ###
$optionsGUI = GUICreate("Options", 365, 200, @DesktopWidth/2 - 365/2, @DesktopHeight/2 - 200/2)
$RadioON = GUICtrlCreateRadio("ON", 128, 40, 49, 17)
If $AOT = 1 Then GUICtrlSetState(-1, $GUI_CHECKED)
$RadioOFF = GUICtrlCreateRadio("OFF", 184, 40, 49, 17)
If $AOT = 0 Then GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateLabel("Always on top:", 116, 8, 120, 24)
GUICtrlSetFont(-1, 12, 800, 0)
GUICtrlCreateLabel("Transparency:", 96, 74, 117, 24)
GUICtrlSetFont(-1, 12, 800, 0)
$tlabel = GUICtrlCreateLabel($transparency, 216, 74, 117, 24)
GUICtrlSetFont(-1, 12, 800, 0)
$tSlider = GUICtrlCreateSlider(24, 112, 318, 45)
GUICtrlSetLimit(-1, 255, 0)
GUICtrlSetData(-1, $transparency)
$optionsBtn_okay = GUICtrlCreateButton("OK", 136, 160, 75, 25)
#EndRegion ### END $optionsGUI ###

$options = TrayCreateItem("Settings")
$about = TrayCreateItem("About")
TrayCreateItem("") ; Create a separator line.
$exit = TrayCreateItem("Exit")

While 1

    Local $tMsg = TrayGetMsg()
    Switch $tMsg
        Case $options
            GUISetState(@SW_SHOW, $optionsGUI)
        Case $about
            MsgBox(0, "About", "OnTopPeekThrough" & @CRLF & @CRLF & _
                    "Press CTRL+SPACE to toggle" & @CRLF & _
                    "Or hold 3 seconds for Options" & @CRLF &  @CRLF & _
                    "By: XiaolinDraconis")
        Case $exit
            Exit
    EndSwitch

    Local $gMsg = GUIGetMsg()
    Switch $gMsg
        Case $optionsBtn_okay
            If GUICtrlRead($RadioON) = $GUI_CHECKED Then
                IniWrite($inifile, "AOT", "True", 1)
            ElseIf GUICtrlRead($RadioOFF) = $GUI_CHECKED Then
                IniWrite($inifile, "AOT", "True", 0)
            EndIf
            IniWrite($inifile, "Transparency", "Value", GUICtrlRead($tlabel))
            GUISetState(@SW_HIDE, $optionsGUI)
        Case $tSlider
            $val = GUICtrlRead($tSlider)
            GUICtrlSetData($tlabel, $val)
        Case $GUI_EVENT_CLOSE
            GUISetState(@SW_HIDE, $optionsGUI)
    EndSwitch

WEnd

Func TapTimer()
    HotKeySet("^{SPACE}")
    $TapTime = 0
    While _IsPressed("20")
        Sleep(1000)
        $TapTime += 1
    WEnd
    If $TapTime < 3 Then
        OnTop()
    Else
        GUISetState(@SW_SHOW, $optionsGUI)
    EndIf
    HotKeySet("^{SPACE}", "TapTimer")
EndFunc   ;==>TapTimer

Func OnTop()
    If $Toggle = 0 Then
        $Toggle = 1
        Set()
    Else
        $Toggle = 0
        Unset()
    EndIf
EndFunc   ;==>OnTop

Func Set()
    $WinTitle = WinGetTitle("[active]")
    WinSetOnTop($WinTitle, "", 1)
    WinSetTrans($WinTitle, "", $Transparency)
EndFunc   ;==>Set

Func Unset()
    $WinTitle = WinGetTitle("[active]")
    WinSetOnTop($WinTitle, "", 0)
    WinSetTrans($WinTitle, "", 255)
EndFunc   ;==>Unset

I'll be honest I am not 100% sure with HotKeys and the way you have gone about handling the way the Hot Keys work to set window transparency etc, but it seems to work, albeit somewhat choppy.

Edited by mpower

Share this post


Link to post
Share on other sites
XiaolinDraconis

Try: 

If $AOT = 1 Then
        GUICtrlSetState($Radio1, $GUI_CHECKED)
    Else
        GUICtrlSetState($Radio1, $GUI_UNCHECKED)
    EndIf

Edit: A more elegant way to handle having a Tray menu and a GUI would be to have a single While loop where you listen for messages from Tray and from the GUI and handle it that way:

P.S. I fixed the issues you were having with the ini not updating and also added a label to the Transparency slider to show the selected number.

I'll be honest I am not 100% sure with HotKeys and the way you have gone about handling the way the Hot Keys work to set window transparency etc, but it seems to work, albeit somewhat choppy.

 

Very nice, thank you. I know the Hotkey thing is sloppy, but I didn't see another way to go about having the delay for opening the options. Think I'll turn that into a double tap instead of holding it. 

The double tap method I'm gonna use is still choppy, but also I need to work out some more issues. It doesn't seem to be saving the transparency setting properly, also it is applying the transparency setting to the Settings GUI. Pretty sure some of that if not all is coming from the way I setup the Hotkey.

I'll work it out, then post what I did when I'm done.

Edited by XiaolinDraconis

Share this post


Link to post
Share on other sites
XiaolinDraconis

Ok so the transparency issue was due to a mix up in the variables, and the hotkey method I chose was with If Then statements and that just didn't work well so I went with a Switch Case.

And TADA! Thanks again, oh and if you notice the hotkey has a variable now, that's for future adjustments, going to make it so the key can be changed.

Near Perfection

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Opt("TrayMenuMode", 3)

Global $inifile = @ScriptDir & "\OTPT.ini", $val = IniRead($inifile,"Transparency","Value","204"), $transparency = 204, $AOT = 1, $Toggle = 0, $TapCount = 0, $Hotkey = "^{SPACE}"

HotKeySet($Hotkey, "TapTimer")

If FileExists($inifile) Then
    $AOT = IniRead($inifile, "AOT", "True", "1")
    $transparency = IniRead($inifile, "Transparency", "Value", "204")
Else
    IniWrite($inifile, "AOT", "True", $AOT & @CRLF)
    IniWrite($inifile, "Transparency", "Value", $transparency & @CRLF & @CRLF & "Max Transparency Value = 255")
EndIf

$optionsGUI = GUICreate("Options", 365, 200, @DesktopWidth / 2 - 365 / 2, @DesktopHeight / 2 - 200 / 2)
$RadioON = GUICtrlCreateRadio("ON", 128, 40, 49, 17)
If $AOT = 1 Then GUICtrlSetState(-1, $GUI_CHECKED)
$RadioOFF = GUICtrlCreateRadio("OFF", 184, 40, 49, 17)
If $AOT = 0 Then GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateLabel("Always on top:", 116, 8, 120, 24)
GUICtrlSetFont(-1, 12, 800, 0)
GUICtrlCreateLabel("Transparency:", 96, 74, 117, 24)
GUICtrlSetFont(-1, 12, 800, 0)
$tlabel = GUICtrlCreateLabel($transparency, 216, 74, 117, 24)
GUICtrlSetFont(-1, 12, 800, 0)
$tSlider = GUICtrlCreateSlider(24, 112, 318, 45)
GUICtrlSetLimit(-1, 255, 0)
GUICtrlSetData(-1, $transparency)
$optionsBtn_okay = GUICtrlCreateButton("OK", 136, 160, 75, 25)

$options = TrayCreateItem("Settings")
$about = TrayCreateItem("About")
TrayCreateItem("") ; Create a separator line.
$exit = TrayCreateItem("Exit")

While 1
    Local $tMsg = TrayGetMsg()
    Switch $tMsg
        Case $options
            GUISetState(@SW_SHOW, $optionsGUI)
        Case $about
            MsgBox(0, "About", "OnTopPeekThrough" & @CRLF & @CRLF & _
                    "Press" & $Hotkey & "to toggle" & @CRLF & _
                    "Or double tap for Options" & @CRLF & @CRLF & _
                    "By: AutoIt V3")
        Case $exit
            Exit
    EndSwitch

    Local $gMsg = GUIGetMsg()
    Switch $gMsg
        Case $optionsBtn_okay
            If GUICtrlRead($RadioON) = $GUI_CHECKED Then
                IniWrite($inifile, "AOT", "True", 1)
            ElseIf GUICtrlRead($RadioOFF) = $GUI_CHECKED Then
                IniWrite($inifile, "AOT", "True", 0)
            EndIf
            IniWrite($inifile, "Transparency", "Value", GUICtrlRead($tlabel))
            GUISetState(@SW_HIDE, $optionsGUI)
        Case $tSlider
            $val = GUICtrlRead($tSlider)
            GUICtrlSetData($tlabel, $val)
            WinSetTrans($optionsGUI,"",$val)
            Sleep(666)
            WinSetTrans($optionsGUI,"",255)
        Case $GUI_EVENT_CLOSE
            GUISetState(@SW_HIDE, $optionsGUI)
    EndSwitch
WEnd

Func TapTimer()
    $TapCount += 1
    Sleep(500)
    Switch $TapCount
    Case 2
        GUISetState(@SW_SHOW, $optionsGUI)
        WinSetOnTop($optionsGUI, "", 1)
        WinSetTrans($optionsGUI, "", 255)
        $TapCount = 0
    Case 1
        OnTop()
        $TapCount = 0
    Case Else
        GUISetState(@SW_SHOW, $optionsGUI)
        WinSetOnTop($optionsGUI, "", 1)
        WinSetTrans($optionsGUI, "", 255)
        $TapCount = 0
    EndSwitch
EndFunc   ;==>TapTimer

Func OnTop()
    If $Toggle = 0 Then
        $Toggle = 1
        Set()
    Else
        $Toggle = 0
        Unset()
    EndIf
EndFunc   ;==>OnTop

Func Set()
    $WinTitle = WinGetTitle("[active]")
    WinSetOnTop($WinTitle, "", 1)
    WinSetTrans($WinTitle, "", $val)
EndFunc   ;==>Set

Func Unset()
    $WinTitle = WinGetTitle("[active]")
    WinSetOnTop($WinTitle, "", 0)
    WinSetTrans($WinTitle, "", 255)
EndFunc   ;==>Unset

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  

  • Similar Content

    • Reziskonh
      By Reziskonh
      Hi, everybody
      I look for GUI whose behavior similar to the message of an email client or antivirus
      In other words:
          Any PC screen able to calculate the size
          To consider the Task bar size
          To find the lower corner on the right/below and to nestle on it

      Notes:
      In GUI the GUICtrlCreateEdit field (as option) - that can be received and displayed through variable information
      Thanks a lot
      PS
      I use the translator, excuse if something is not clear
       

    • Pike
      By Pike
      Hello Everyone,
      New Guy here. This is a two-part question, hopefully easy enough though. I know it's ugly coding, this is because I have only a couple hours worth of coding experience and could really use some help.
      1) When I single click the button I want one action (like playing a sound clip) and when I double click the button I want a different action (such as opening dialogue box to ask for soundclip directory address). At the bottom of the script I made a comment which one I would like single click versus double click.
      2) I can not get the FileOpenDialogue to save the file address to the config.ini file at the 'One' position on the .ini.
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> #include <FileConstants.au3> #include <AutoItConstants.au3> #include <Sound.au3> Opt('MustDeclareVars', 1) Opt("GUIOnEventMode", 1) Global $OneID _Main() Func _Main() GUICreate("Form1", 156, 86, 281, 276) $OneID = GUICtrlCreateButton("Button", 15, 17, 122, 37) GUICtrlSetOnEvent($OneID, "OnOne") GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit") GUISetState() While 1 While 1 Sleep(1000) WEnd WEnd EndFunc ;---------------Functions------------- While 1 Sleep(100) WEnd Func OnOne() ; ******************Single Click for this action**************** $OneID = IniRead("config.ini", "Config", "One", $OneID) If $OneID = True Then SoundPlay($OneID, @HotKeyPressed) Else ; *******Double Click for this action*****And Help Saving File Address to config.ini 'One'*********** $OneID = FileOpenDialog("Select file", @WorkingDir, "All (*.*)") IniWrite("config.ini", "Config", "One", $OneID) $OneID = InputBox("Enter Information", "Short Name for File?", "") IniWrite("config.ini", "Config", "NameOne", $OneID) EndIf EndFunc Any help would be greatly appreciated, and if you need anymore clarity as to what exactly I'm trying to do, please do not hesitate to ask. Thanks so much!
      Pike
    • VollachR
      By VollachR
      Hi,
      I'd like to show a progress bar for an operation performed by an external program my script is running silently, I want to show it in a GUI I created using the GUICtrlCreateProgress but I have no idea how to do it.
      The important thing to point out is that there's no way of knowing how long the external program will run, as it is a file splitter and it depends on the size of file it splits and the split parts size.
      Can someone point me in the right direction or give me an example how to do so?
      This is my RunWait command:
      RunWait($MYFILES1 & '\fsplit.exe -split ' & $Size & ' mb ' & $File & " -f " & $File & "." & $extension) It uses multiple variables declared and set earlier in the script, how will I got about having the progress of that command shown using GUICtrlCreateProgress ? Is it possible?
      Thank you.
    • nacerbaaziz
      By nacerbaaziz
      Hello my friends
      I have an inquiry and I hope to find the answer here
      I want to create a graphical user interface
      but I want to hide the system menu
      I mean the window menu
      Is this possible?
      If is possible please give me how to do that
      Thanks in advance
    • helmar
      By helmar
      I was playing around with simple GUI creation.  I tend to like parameter driven coding (in prior life (years ago) as Clipper/FoxPro/dBase coder).  Just wanted to see what I could do with a GUI.
      #Region options, includes Opt('MustDeclareVars', 1) Opt("GUIOnEventMode", 1) ; Change to OnEvent mode #include <GUIConstantsEx.au3> #EndRegion options, includes Global Const $nCols = 2, $nRows = 6, $nSpacer = 10, $nBtnWidth = 150, $nBtnHeight = 30 Global $xName = 0, $xID = 0 Global $nGUIWidth = ($nCols * $nBtnWidth) + (($nCols + 1) * $nSpacer) Global $nGUIHeight = ($nRows * $nBtnHeight) + (($nRows + 1) * $nSpacer) Global $hMainGUI = GUICreate("Calculated GUI", $nGUIWidth, $nGUIHeight, -1, -1) For $xRows = 1 to $nRows ;in this arrangement, tabbing is left to right, then next row For $xCols = 1 to $nCols ;reverse the order of this line with the prior line for top to bottom tabbing, then next col $xName += 1 $xID += 1 Global $Dummy = GUICtrlCreateButton("Button" & $xName, _ ($nBtnWidth * ($xCols - 1)) + (($xCols - 1) * $nSpacer) + $nSpacer, _ ($nBtnHeight* ($xRows - 1)) + (($xRows - 1) * $nSpacer) + $nSpacer, _ $nBtnWidth, _ $nBtnHeight) GUICtrlSetOnEvent($xID+2, "Handler") Next Next GUISetOnEvent($GUI_EVENT_CLOSE, "CloseApp") GUISetState(@SW_SHOW) While 1 Sleep(10) WEnd Func CloseApp() Exit EndFunc Func Handler() MsgBox(0,0,"Button " & @GUI_CtrlId - 2) EndFunc  
×