Sign in to follow this  
Followers 0
Chetwood

Problems reading return value from checkbox

10 posts in this topic

I'm trying to duplicate a checkbox/input combination I've seen often in programs. When the checkbox 'play sound' is unchecked, the input box below is grayed out and vice versa. To do this I do a Gui(read) on that checkbox but instead of giving back the values '1' for checked and '0' for unchecked (kinda what I expected) I always get '3'. Where does this value come from and why do I get it on both actions? TIA!

#include "GUIConstants.au3"
#include <Constants.au3>

$playsound = 0
$soundfile= @WindowsDir & "\media\notify.wav"

;open dialogbox
GUICreate("Sound", 310, 150) 

;tick checkboxes according to default values
$chk_playsound = GUICtrlCreateCheckbox("Play sound when done", 10, 50, 200, 20)
IF $playsound = 1 then GUICtrlSetState ($chk_playsound, $GUI_CHECKED)

;input field and buttons for sound
$soundfileinput = GUICtrlCreateInput ("", 28, 75, 150, 20)
GUICtrlSetState($soundfileinput,$GUI_ACCEPTFILES)
$browse = GUICtrlCreateButton ("...", 190, 75, 20, 20)
$play = GUICtrlCreateButton (">", 215, 75, 20, 20,$BS_Icon)
GUICtrlSetImage($play,"mmsys.cpl",36,0)

If $playsound = 0 Then
   GuiCtrlSetState ($soundfileinput,$GUI_DISABLE)
   GuiCtrlSetState ($browse,$GUI_DISABLE)
   GuiCtrlSetState ($play,$GUI_DISABLE)
EndIf

GUISetState()     ; created windows are initially hidden, now it's made visible

; run the GUI until the dialog is closed
While 1
  $msg = GUIGetMsg()
  Select
     Case $msg = -3
        ExitLoop
     Case $msg = $chk_playsound
        GUIRead($chk_playsound)
        MsgBox(0, "checkbox", $chk_playsound)
        If $chk_playsound = 1 Then
        GuiCtrlSetState ($soundfileinput,$GUI_ENABLE)
        GuiCtrlSetState ($browse,$GUI_ENABLE)
        GuiCtrlSetState ($play,$GUI_ENABLE)
        GUICtrlSetData ($soundfileinput,$soundfile)
        EndIf
        If $chk_playsound = 0 Then
        MsgBox(0, "checkbox", $chk_playsound) 
        GuiCtrlSetState ($soundfileinput,$GUI_DISABLE)
        GuiCtrlSetState ($browse,$GUI_DISABLE)
        GuiCtrlSetState ($play,$GUI_DISABLE)
        GUICtrlSetData ($soundfileinput,"")
        EndIf
      Case $msg = $browse
        $soundfile = FileOpenDialog("Select wav-file to play", @ScriptDir , "Windows Waveform (*.wav)", 1 + 2 )
        If @error Then
          ;continue
        Else
           GUICtrlSetData($soundfileinput,$soundfile)
        EndIf
      Case $msg = $play
        If $soundfileinput <> "" Then
           SoundPlay($soundfile,0)
        EndIf
  EndSelect
Wend
Exit

MultiMakeMKV: batch processing for MakeMKV (Win)MultiShrink: batch processing for DVD ShrinkOffizieller Übersetzer von DVD Shrink deutsch

Share this post


Link to post
Share on other sites



I'm trying to duplicate a checkbox/input combination I've seen often in programs. When the checkbox 'play sound' is unchecked, the input box below is grayed out and vice versa. To do this I do a Gui(read) on that checkbox but instead of giving back the values '1' for checked and '0' for unchecked (kinda what I expected) I always get '3'. Where does this value come from and why do I get it on both actions? TIA!

<{POST_SNAPBACK}>

When you do a GUIRead you need to store the result into a variable like:

$Status = GUIRead($chk_playsound)

and then test the value of that variable. You are now getting back the Handle for the checkbox.


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

When you do a GUIRead you need to store the result into a variable like:

$Status = GUIRead($chk_playsound)

and then test the value of that variable. You are now getting back the Handle for the checkbox.

<{POST_SNAPBACK}>

OK cool, I did it and it works when ticking the checkbox. The GuiRead command gives back a value of '1'. However, when I uncheck it, the value returned is '4' instead of '0'. What am I overlooking?

Case $msg = $chk_playsound
        $status_chk_playsound=GUIRead($chk_playsound)
        MsgBox(0, "checkbox", $status_chk_playsound) 
        If $status_chk_playsound = 1 Then
           GuiCtrlSetState ($soundfileinput,$GUI_ENABLE)
           GuiCtrlSetState ($browse,$GUI_ENABLE)
           GuiCtrlSetState ($play,$GUI_ENABLE)
           GUICtrlSetData ($soundfileinput,$soundfile)
        EndIf
        If $status_chk_playsound = 0 Then
           GuiCtrlSetState ($soundfileinput,$GUI_DISABLE)
           GuiCtrlSetState ($browse,$GUI_DISABLE)
           GuiCtrlSetState ($play,$GUI_DISABLE)
           GUICtrlSetData ($soundfileinput,"")
        EndIf

MultiMakeMKV: batch processing for MakeMKV (Win)MultiShrink: batch processing for DVD ShrinkOffizieller Übersetzer von DVD Shrink deutsch

Share this post


Link to post
Share on other sites

OK cool, I did it and it works when ticking the checkbox. The GuiRead command gives back a value of '1'. However, when I uncheck it, the value returned is '4' instead of '0'. What am I overlooking?

<{POST_SNAPBACK}>

Nothing ..... :)

State Comments

No Change 0

$GUI_UNCHECKED Radio or Checkbox will be unchecked

$GUI_CHECKED same but Checked

Global $GUI_CHECKED = 1

Global $GUI_INDETERMINATE = 2

Global $GUI_UNCHECKED = 4


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

I am having the same problem as well.

I changed the GUIconstrants file to

Global $GUI_UNCHECKED = 0

and that didnt work.

I also added

GUICtrlSetState(-1,$GUI_UNCHECKED)

with no luck as well.

Here is my simple test script, I would like

checked to =1 (which it does)

unchecked to =0 (it equals 4 currently)

My undetermined state is also 4, I would like it to =0 as well.

#include <GUIConstants.au3>

GUICreate("My GUI group"); will create a dialog box that when displayed is centered

GUICtrlCreateGroup ("My staggered Radio", 178, 80, 160, 100)
$res1 = GUICtrlCreateRadio ("item 1", 200, 100, 60, 20)
$res2 = GUICtrlCreateRadio ("item 2", 223, 125, 60, 20)
$res3 = GUICtrlCreateRadio ("item 3", 245, 150, 60, 20)
GUICtrlCreateGroup ("",-99,-99,1,1)
 



   

$OK = GUICtrlCreateButton ("OK",  188, 325, 60, 25)

GUISetState ()  


While 1
    $msg = GUIGetMsg()
$Statusres1 = GUIRead($res1) 
$Statusres2 = GUIRead($res2)
$Statusres3 = GUIRead($res3)
    
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
   If $msg = $OK Then Msgbox(0,"NFO","test" & @CRLF & $statusres1 & @CRLF & $statusres2 & @CRLF & $statusres3)
 
Wend

thanks in advance

Edited by megahyperion

Share this post


Link to post
Share on other sites

I am having the same problem as well.

I changed the GUIconstrants file to

Global $GUI_UNCHECKED = 0

-snip-

My undetermined state is also 4, I would like it to =0 as well.

thanks in advance

<{POST_SNAPBACK}>

Don't change anything in GUIconstants.au3 since it contains CONSTANTS.

It is a given that an unchecked checkbox/radio returns a 4!

Just use an IF if you want a Variable to contain a 1 or 0 like:

$Statusres1 = GUIRead($res1) 
If $Statusres1 = 4 then $Statusres1 = 0

Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

Asd JdeB said: You may add/delete things from the GUIConstants file, but do not change anything.

If you did I suggest you download a new copy.

I'll edit your script.

#include <GUIConstants.au3>

GUICreate("My GUI group"); will create a dialog box that when displayed is centered

GUICtrlCreateGroup ("My staggered Radio", 178, 80, 160, 100)
$res1 = GUICtrlCreateRadio ("item 1", 200, 100, 60, 20)
$res2 = GUICtrlCreateRadio ("item 2", 223, 125, 60, 20)
$res3 = GUICtrlCreateRadio ("item 3", 245, 150, 60, 20)
GUICtrlCreateGroup ("",-99,-99,1,1)
  

$OK = GUICtrlCreateButton ("OK",  188, 325, 60, 25)

GUISetState ()  


While 1
   $msg = GUIGetMsg()
      If $msg = $res1 OR $msg = $res2 OR $msg = $res3 Then
         If GUIRead($res1) = $GUI_CHECKED Then
            $statusres1 = " checked "
         Else
            $statusres1 = " unchecked "
         EndIf

         If GUIRead($res2) = $GUI_CHECKED Then
            $statusres2 = " checked "
         Else
            $statusres2 = " unchecked "
         EndIf
         
         If GUIRead($res3) = $GUI_CHECKED Then
            $statusres3 = " checked "
         Else
            $statusres3 = " unchecked "
         EndIf
      EndIf      
   
   If $msg = $GUI_EVENT_CLOSE Then ExitLoop
  If $msg = $OK Then Msgbox(0,"NFO","test" & @CRLF & $statusres1 & @CRLF & $statusres2 & @CRLF & $statusres3)

Wend

Share this post


Link to post
Share on other sites

My script is huge, but I managed to pull it off with

If GUIRead($res1) > 3 Then
$statusres1 = GUIRead($res1) - 4 
ElseIf GUIRead($res1) < 3 Then
$statusres1 = GUIRead($res1) 
EndIf

my radio button is $res1, instead of using $res1 for the 1 and 0 i now use $statusres1

slopy, but it works

with 2 weeks of programing under my belt I'm gonna have to go ahead and give myself a pat on the back for that one :)

Share this post


Link to post
Share on other sites

My script is huge, but I managed to pull it off with

If GUIRead($res1) > 3 Then
$statusres1 = GUIRead($res1) - 4 
ElseIf GUIRead($res1) < 3 Then
$statusres1 = GUIRead($res1) 
EndIf

my radio button is $res1, instead of using $res1 for the 1 and 0 i now use $statusres1

slopy, but it works

with 2 weeks of programing under my belt I'm gonna have to go ahead and give myself a pat on the back for that one  :)

<{POST_SNAPBACK}>

yeap.. but this should work too and is less confusing:

$Statusres1 = GUIRead($res1)

If $Statusres1 = 4 then $Statusres1 = 0


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

You could create a function that returns 1 and 0 instead of 1 and 4

#include <GuiConstants.au3>
;....
$statusres1 = checkStatus($res1)
;...
Exit
Func checkStatus($ref)
  If GuiRead($ref) = $GUI_CHECKED Then Return 1
  Return 0;otherwise
EndFunc

Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig!

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  
Followers 0