Jump to content
Chimaera

Reading a checkbox and setting an inifile not working as expected

Recommended Posts

Chimaera

Im doing a small gui that has checkboxes and i want it to write to an ini file if the box state is changed so i came up with this

While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Button_1
                    ; Stuff to add here
            Case $MainCheckbox1
                If GUICtrlRead($MainCheckbox1) <> '' Then
                    Local $CheckTest1 = GUICtrlGetState($MainCheckbox1)
                    ConsoleWrite($CheckTest1 & @CRLF) ; 80 ?
                    If $CheckTest1 = 1 Then
                        IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", "1")
                    ElseIf $CheckTest1 = 0 Then
                        IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", "0")
                    EndIf
                EndIf
        EndSwitch
    WEnd

but for some reason when i check the checkbox it returns 80 ? when i was expecting 1

and it gives the same number if i clear the checkbox

any suggestions plz?

ps ive been staring at this for a while now so it might just be code lag thats stopping me from seeing the obvious

Share this post


Link to post
Share on other sites
Xandy

Compare

if guictrlread($checkbox) = $gui_checked then

 

Set

guictrlsetstate($checkbox, $gui_checked) or guictrlsetstate($checkbox, $gui_unchecked)

Edited by Xandy

Share this post


Link to post
Share on other sites
Melba23

Chimaera,

Why are you using GUICtrlGetState? To check if a checkbox is checked/unchecked just use GUICtrlRead. The whole thing could be simplified to:

#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Test", 500, 500)
$cMainCheckbox1 = GUICtrlCreateCheckbox("Test", 10, 10, 200, 20)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $cMainCheckbox1
            If GUICtrlRead($cMainCheckbox1) = 1 Then
                ConsoleWrite("Checked" & @CRLF)
                ;IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", "1")
            Else
                ConsoleWrite("Unchecked" & @CRLF)
                ;IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", "0")
            EndIf

    EndSwitch
WEnd

M23

  • Like 1

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
Chimaera

You see i knew it was something daft im doing

Amended to this now

Case $MainCheckbox1
                If GUICtrlRead($MainCheckbox1) = $GUI_CHECKED Then
                    IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", "1")
                Else
                    IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", "0")
                EndIf

 

  • Like 1

Share this post


Link to post
Share on other sites
Xandy

Should you write the state?  Such as:

If GUICtrlRead($MainCheckbox1) = $GUI_CHECKED Then
    IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", $gui_checked)
Else
    IniWrite(@ScriptDir & "\settings.ini", "gui", "g1", $gui_unchecked)
EndIf

I've seen a read checkbox return 1 for checked and 4 for unchecked

Edited by Xandy

Share this post


Link to post
Share on other sites
guinness

Just to add, variables inside loops should be declared outside, as this can affect performance of the script.

  • Like 1

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Share this post


Link to post
Share on other sites
Chimaera

@guinness thx i was aware and this was rough whilst i was working on it, i added the local to save making the global whilst i was tweaking and it was driving me nuts warning me as i always use

#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7

Thx for the help all

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

×