Chimaera

Reading a checkbox and setting an inifile not working as expected

10 posts in this topic

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



#3 ·  Posted (edited)

Compare

if guictrlread($checkbox) = $gui_checked then

 

Set

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

Edited by Xandy

I am not a lawyer.  (-_-) Xandy About  (^o^) Discord - Xandy Programmer

Share this post


Link to post
Share on other sites

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

1 person likes this

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

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

 

1 person likes this

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

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

I am not a lawyer.  (-_-) Xandy About  (^o^) Discord - Xandy Programmer

Share this post


Link to post
Share on other sites

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

1 person likes this

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_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: 04/09/2015

Share this post


Link to post
Share on other sites

@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