XiaolinDraconis Posted June 22, 2014 Posted June 22, 2014 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. expandcollapse popup#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
XiaolinDraconis Posted June 22, 2014 Author Posted June 22, 2014 Managed to fix the slider. Now working on radio buttons.
Solution mpower Posted June 23, 2014 Solution Posted June 23, 2014 (edited) 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. expandcollapse popup#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 June 23, 2014 by mpower
XiaolinDraconis Posted June 24, 2014 Author Posted June 24, 2014 (edited) 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 June 24, 2014 by XiaolinDraconis
XiaolinDraconis Posted June 24, 2014 Author Posted June 24, 2014 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 expandcollapse popup#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
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