31290

Button not working when clicked again.

4 posts in this topic

Hi everyone,

Hope you're fine today :)

I'm facing a little issue. I'm sure this might be nothing for you but I can't figure it out by myself. 

Here's the code (not written by me, credits to supdw2k for this huge help ^^):

#include <Array.au3>
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <ComboConstants.au3>
#Include <Constants.au3>
#include <Crypt.au3>
#include <Date.au3>
#include <File.au3>
#Include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>


Global $Images = "C:\Windows\ATL_Laptop\Resources\Images\"
Opt("GUIOnEventMode", 1)
Global Const $sINIFile = "test.ini"
Global $aCheckboxes

ManualActions()

Func ManualActions()
    Global $ManualActionsGui = GuiCreate("Automated Task List Suite", 460, 480, -1, -1)
     GUISetBkColor (0xFFFFFF)
    GUICtrlCreatePic ($Images & "\SAClogo.jpg", 110, 10, 240, 80)
    GUICtrlCreateLabel ("---MANUAL ACTIONS---" , 173, 100, 300, -1)
    GUICtrlSetFont (-1, 8.5, 700, 0)
    Local $ResetAll = GuiCtrlCreateButton ("Reset Everything",  10 , 440, 97,  30)
    Local $SaveAndQuit = GUICtrlCreateButton ("Save and Quit", 360, 440, 97, 30)
    Local $iX = 10, $iY = 120

    $aCheckboxes = _ReadINI()
    For $x = 0 To UBound($aCheckboxes) - 1
        Local $idCheckBox = _CreateCheckbox($aCheckboxes[$x][0], $iX, $iY)
        If _Crypt_HashData($aCheckboxes[$x][0] & "|" & $sINIFile & "|" & $GUI_CHECKED, $CALG_MD5) = $aCheckboxes[$x][1] Then
            GUICtrlSetState(-1, BitOR($GUI_CHECKED, $GUI_DISABLE))
        EndIf
        $aCheckboxes[$x][0] = $idCheckBox
        $iY += 20
    Next

        GUISetOnEvent ($GUI_EVENT_CLOSE, "_Exit", $ManualActionsGui)
    GUICtrlSetOnEvent ($ResetAll, "_ResetAll")
        GUICtrlSetOnEvent ($SaveAndQuit , "_Exit")
    GUISetState()

    While 1
Sleep(10)
 WEnd
EndFunc   ;==>GenGUI

Func _ResetAll()
GUIDelete ($ManualActionsGui)
FileDelete ($sINIFile)
ManualActions()
EndFunc

Func _Checked()
    If GUICtrlRead(@GUI_CtrlId) = 1 Then GUICtrlSetState(@GUI_CtrlId, $GUI_DISABLE)
EndFunc   ;==>_Checked

Func _CreateCheckbox($sLabel, $iX, $iY)
    Local $idCheckBox = GUICtrlCreateCheckbox($sLabel, $iX, $iY, -1, -1)
    GUICtrlSetOnEvent(-1, "_Checked")

    Return $idCheckBox
EndFunc   ;==>_CreateCheckbox

Func _Exit()
    _WriteINI()
    Exit
EndFunc   ;==>_Exit

Func _GenINIFile()
 Local $aCheckboxes[14] = ["Put a label with hostname on the computer?", "Check if AHCI is set in the BIOS", "Add all applications in AD?", "Check the installed drivers?", "Customize all desktop icons?", _
   "Restore User's data?", "Connect to the VPN once?", "Update Firefox and Google Chrome ?", "Restore user's Bookmarks?", "Deploy CrashPlanPro, remove new licence and send a mail to the Service Desk?", _
   "Check if printers the User needs are present?", "Copy SAPlogin.ini from former Computer (if needed)?", "Encrypt the Disk with PGP?", "Update Remedy database?"]
    FileClose(FileOpen($sINIFile, 2))
    For $x = 0 To UBound($aCheckboxes) - 1
        IniWrite($sINIFile, "Checkbox_Labels", $x, $aCheckboxes[$x])
        IniWrite($sINIFile, "Checkbox_States", $x, "")
    Next
EndFunc   ;==>_GenINIFile

Func _ReadINI()
    If Not FileExists($sINIFile) Then _GenINIFile()
    Local $aCheckbox_Labels = IniReadSection($sINIFile, "Checkbox_Labels")
    If @error Then Return SetError(1, 0, 0) ;If INIReadSection Failed Set Error = 1
    Local $aCheckbox_States = IniReadSection($sINIFile, "Checkbox_States")
    If @error Then Return SetError(2, 0, 0) ;If INIReadSection Failed Set Error = 2

    Local $aCheckboxes[$aCheckbox_Labels[0][0]][2]
    For $x = 0 To ($aCheckbox_Labels[0][0] - 1)
        $aCheckboxes[$x][0] = $aCheckbox_Labels[$x + 1][1]
        $aCheckboxes[$x][1] = $aCheckbox_States[$x + 1][1]
    Next

    Return $aCheckboxes
EndFunc   ;==>_ReadINI

Func _WriteINI()
    For $x = 0 To UBound($aCheckboxes) - 1
        IniWrite($sINIFile, "Checkbox_Labels", $x, GUICtrlRead($aCheckboxes[$x][0], 1))
        IniWrite($sINIFile, "Checkbox_States", $x, _Crypt_HashData(GUICtrlRead($aCheckboxes[$x][0], 1) & "|" & $sINIFile & "|" & GUICtrlRead($aCheckboxes[$x][0]), $CALG_MD5))
    Next
EndFunc   ;==>_WriteINI
 
 

When ran the first time, my buttons are working. But as soon as the Gui is recreated, thzy are not working anymore. 

I think the came from the _ResetAll function but for me, this should work.

I don't know what I'm missing there and I hope you can give me a hand on this  :sweating:

Thanks in advance :)


~~~ Doom Shall Never Die, Only The Players ~~~

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

I don't know what I'm missing there and I hope you can give me a hand on this  :sweating:

Thanks in advance :)

there you go:

#include <Array.au3>
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <ComboConstants.au3>
#include <Constants.au3>
#include <Crypt.au3>
#include <Date.au3>
#include <File.au3>
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>


Global $Images = "C:\Windows\ATL_Laptop\Resources\Images\"
Opt("GUIOnEventMode", 1)
Global Const $sINIFile = "test.ini"
Global $aCheckboxes
Global $iRunning = 1
ManualActions()

Func ManualActions()
    Global $ManualActionsGui = GUICreate("Automated Task List Suite", 460, 480, -1, -1)
    GUISetBkColor(0xFFFFFF)
    GUICtrlCreatePic($Images & "\SAClogo.jpg", 110, 10, 240, 80)
    GUICtrlCreateLabel("---MANUAL ACTIONS---", 173, 100, 300, -1)
    GUICtrlSetFont(-1, 8.5, 700, 0)
    Local $ResetAll = GUICtrlCreateButton("Reset Everything", 10, 440, 97, 30)
    Local $SaveAndQuit = GUICtrlCreateButton("Save and Quit", 360, 440, 97, 30)
    Local $iX = 10, $iY = 120

    $aCheckboxes = _ReadINI()
    For $x = 0 To UBound($aCheckboxes) - 1
        Local $idCheckBox = _CreateCheckbox($aCheckboxes[$x][0], $iX, $iY)
        If _Crypt_HashData($aCheckboxes[$x][0] & "|" & $sINIFile & "|" & $GUI_CHECKED, $CALG_MD5) = $aCheckboxes[$x][1] Then
            GUICtrlSetState(-1, BitOR($GUI_CHECKED, $GUI_DISABLE))
        EndIf
        $aCheckboxes[$x][0] = $idCheckBox
        $iY += 20
    Next

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $ManualActionsGui)
    GUICtrlSetOnEvent($ResetAll, "_ResetAll")
    GUICtrlSetOnEvent($SaveAndQuit, "_Exit")
    GUISetState()
    $iRunning = 1
    While $iRunning
        Sleep(10)
    WEnd
    GUIDelete($ManualActionsGui)
    FileDelete($sINIFile)
    ManualActions()
EndFunc   ;==>ManualActions

Func _ResetAll()
    $iRunning = 0
EndFunc   ;==>_ResetAll
Func _Checked()
    If GUICtrlRead(@GUI_CtrlId) = 1 Then GUICtrlSetState(@GUI_CtrlId, $GUI_DISABLE)
EndFunc   ;==>_Checked

Func _CreateCheckbox($sLabel, $iX, $iY)
    Local $idCheckBox = GUICtrlCreateCheckbox($sLabel, $iX, $iY, -1, -1)
    GUICtrlSetOnEvent(-1, "_Checked")

    Return $idCheckBox
EndFunc   ;==>_CreateCheckbox

Func _Exit()
    _WriteINI()
    Exit
EndFunc   ;==>_Exit

Func _GenINIFile()
    Local $aCheckboxes[14] = ["Put a label with hostname on the computer?", "Check if AHCI is set in the BIOS", "Add all applications in AD?", "Check the installed drivers?", "Customize all desktop icons?", _
            "Restore User's data?", "Connect to the VPN once?", "Update Firefox and Google Chrome ?", "Restore user's Bookmarks?", "Deploy CrashPlanPro, remove new licence and send a mail to the Service Desk?", _
            "Check if printers the User needs are present?", "Copy SAPlogin.ini from former Computer (if needed)?", "Encrypt the Disk with PGP?", "Update Remedy database?"]
    FileClose(FileOpen($sINIFile, 2))
    For $x = 0 To UBound($aCheckboxes) - 1
        IniWrite($sINIFile, "Checkbox_Labels", $x, $aCheckboxes[$x])
        IniWrite($sINIFile, "Checkbox_States", $x, "")
    Next
EndFunc   ;==>_GenINIFile

Func _ReadINI()
    If Not FileExists($sINIFile) Then _GenINIFile()
    Local $aCheckbox_Labels = IniReadSection($sINIFile, "Checkbox_Labels")
    If @error Then Return SetError(1, 0, 0) ;If INIReadSection Failed Set Error = 1
    Local $aCheckbox_States = IniReadSection($sINIFile, "Checkbox_States")
    If @error Then Return SetError(2, 0, 0) ;If INIReadSection Failed Set Error = 2

    Local $aCheckboxes[$aCheckbox_Labels[0][0]][2]
    For $x = 0 To ($aCheckbox_Labels[0][0] - 1)
        $aCheckboxes[$x][0] = $aCheckbox_Labels[$x + 1][1]
        $aCheckboxes[$x][1] = $aCheckbox_States[$x + 1][1]
    Next

    Return $aCheckboxes
EndFunc   ;==>_ReadINI

Func _WriteINI()
    For $x = 0 To UBound($aCheckboxes) - 1
        IniWrite($sINIFile, "Checkbox_Labels", $x, GUICtrlRead($aCheckboxes[$x][0], 1))
        IniWrite($sINIFile, "Checkbox_States", $x, _Crypt_HashData(GUICtrlRead($aCheckboxes[$x][0], 1) & "|" & $sINIFile & "|" & GUICtrlRead($aCheckboxes[$x][0]), $CALG_MD5))
    Next
EndFunc   ;==>_WriteINI

.. I just fix the loop problem, the rest of the code I did not tweak/correct

Edited by argumentum
1 person likes this

Share this post


Link to post
Share on other sites

Argumentum, 

Thanks a lot for this, working perfectly :)

1 person likes this

~~~ Doom Shall Never Die, Only The Players ~~~

Share this post


Link to post
Share on other sites

Here's a better way, without the recursion of the previous script.

#include <Array.au3>
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <ComboConstants.au3>
#include <Constants.au3>
#include <Crypt.au3>
#include <Date.au3>
#include <File.au3>
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>


Global $Images = "C:\Windows\ATL_Laptop\Resources\Images\"
Opt("GUIOnEventMode", 1)
Global Const $sINIFile = "test.ini"
Global $aCheckboxes, $bReset = False
ManualActions()
While 1
    If $bReset Then
        $bReset = False
        ManualActions()
    EndIf
WEnd
Func ManualActions()
    Global $ManualActionsGui = GUICreate("Automated Task List Suite", 460, 480, -1, -1)
    GUISetBkColor(0xFFFFFF)
    GUICtrlCreatePic($Images & "\SAClogo.jpg", 110, 10, 240, 80)
    GUICtrlCreateLabel("---MANUAL ACTIONS---", 173, 100, 300, -1)
    GUICtrlSetFont(-1, 8.5, 700, 0)
    Local $ResetAll = GUICtrlCreateButton("Reset Everything", 10, 440, 97, 30)
    Local $SaveAndQuit = GUICtrlCreateButton("Save and Quit", 360, 440, 97, 30)
    Local $iX = 10, $iY = 120

    $aCheckboxes = _ReadINI()
    For $x = 0 To UBound($aCheckboxes) - 1
        Local $idCheckBox = _CreateCheckbox($aCheckboxes[$x][0], $iX, $iY)
        If _Crypt_HashData($aCheckboxes[$x][0] & "|" & $sINIFile & "|" & $GUI_CHECKED, $CALG_MD5) = $aCheckboxes[$x][1] Then
            GUICtrlSetState(-1, BitOR($GUI_CHECKED, $GUI_DISABLE))
        EndIf
        $aCheckboxes[$x][0] = $idCheckBox
        $iY += 20
    Next

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $ManualActionsGui)
    GUICtrlSetOnEvent($ResetAll, "_ResetAll")
    GUICtrlSetOnEvent($SaveAndQuit, "_Exit")
    GUISetState()

    While Not $bReset
        Sleep(10)
    WEnd
EndFunc   ;==>ManualActions

Func _ResetAll()
    GUIDelete($ManualActionsGui)
    FileDelete($sINIFile)
;~  ManualActions()
    $bReset = True
EndFunc   ;==>_ResetAll

Func _Checked()
    If GUICtrlRead(@GUI_CtrlId) = 1 Then GUICtrlSetState(@GUI_CtrlId, $GUI_DISABLE)
EndFunc   ;==>_Checked

Func _CreateCheckbox($sLabel, $iX, $iY)
    Local $idCheckBox = GUICtrlCreateCheckbox($sLabel, $iX, $iY, -1, -1)
    GUICtrlSetOnEvent(-1, "_Checked")

    Return $idCheckBox
EndFunc   ;==>_CreateCheckbox

Func _Exit()
    _WriteINI()
    Exit
EndFunc   ;==>_Exit

Func _GenINIFile()
    Local $aCheckboxes[14] = ["Put a label with hostname on the computer?", "Check if AHCI is set in the BIOS", "Add all applications in AD?", "Check the installed drivers?", "Customize all desktop icons?", _
            "Restore User's data?", "Connect to the VPN once?", "Update Firefox and Google Chrome ?", "Restore user's Bookmarks?", "Deploy CrashPlanPro, remove new licence and send a mail to the Service Desk?", _
            "Check if printers the User needs are present?", "Copy SAPlogin.ini from former Computer (if needed)?", "Encrypt the Disk with PGP?", "Update Remedy database?"]
    FileClose(FileOpen($sINIFile, 2))
    For $x = 0 To UBound($aCheckboxes) - 1
        IniWrite($sINIFile, "Checkbox_Labels", $x, $aCheckboxes[$x])
        IniWrite($sINIFile, "Checkbox_States", $x, "")
    Next
EndFunc   ;==>_GenINIFile

Func _ReadINI()
    If Not FileExists($sINIFile) Then _GenINIFile()
    Local $aCheckbox_Labels = IniReadSection($sINIFile, "Checkbox_Labels")
    If @error Then Return SetError(1, 0, 0) ;If INIReadSection Failed Set Error = 1
    Local $aCheckbox_States = IniReadSection($sINIFile, "Checkbox_States")
    If @error Then Return SetError(2, 0, 0) ;If INIReadSection Failed Set Error = 2

    Local $aCheckboxes[$aCheckbox_Labels[0][0]][2]
    For $x = 0 To ($aCheckbox_Labels[0][0] - 1)
        $aCheckboxes[$x][0] = $aCheckbox_Labels[$x + 1][1]
        $aCheckboxes[$x][1] = $aCheckbox_States[$x + 1][1]
    Next

    Return $aCheckboxes
EndFunc   ;==>_ReadINI

Func _WriteINI()
    For $x = 0 To UBound($aCheckboxes) - 1
        IniWrite($sINIFile, "Checkbox_Labels", $x, GUICtrlRead($aCheckboxes[$x][0], 1))
        IniWrite($sINIFile, "Checkbox_States", $x, _Crypt_HashData(GUICtrlRead($aCheckboxes[$x][0], 1) & "|" & $sINIFile & "|" & GUICtrlRead($aCheckboxes[$x][0]), $CALG_MD5))
    Next
EndFunc   ;==>_WriteINI

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

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