Jump to content
Sign in to follow this  
NeverDUN

Help with GUI script needed.

Recommended Posts

NeverDUN

Ok so thus far the script does what it's suppose to do.. to a point. 

There are two complications and they are as follows:

  • There is suppose to be ONE GUI that opens up.

When i run the script it opens, but when i close it another identical one opens behind it.

  • When i click save on the first GUI it saves like it's supposed too.

BUT when i close it and reopen it, it's suppose to open with the info that was saved.

I'm no pro coder, maybe it's something very small i'm not getting.

Some help would be highly appreciated.

Yea.. i have it saving alot :3

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>


Do
    $pass = InputBox("Enter Password", "Please enter the password", "", "*", 150, 120)
    If $pass <> "Password" Then
    EndIf
    If (@error == 1) Then Exit ;
Until $pass == "123"
MsgBox(0, "Success", "Correct password" & @CRLF & "")

Global $sConfigPath = @ScriptDir & "\Settings.ini"

ProgressOn("Title", "Loading program", "Loading...")

For $i = 0 To 100
    ProgressSet($i)
    Sleep(5)
Next

ProgressSet(50, "Half Way.")
Sleep(250)

ProgressSet(100, "Done!")
Sleep(750)
ProgressOff()

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Title", 610, 477, 206, 143)
$Input1 = GUICtrlCreateInput("Date", 480, 16, 113, 21)
$Input2 = GUICtrlCreateInput("Title", 16, 56, 577, 21)
$Edit1 = GUICtrlCreateEdit("", 16, 80, 577, 329)
$Button1 = GUICtrlCreateButton("Save", 520, 424, 75, 25, $BS_DEFPUSHBUTTON)
$idProgressbar1 = GUICtrlCreateProgress(16, 424, 454, 17)
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
GUICtrlSetColor(-1, 32250)
GUISetState(@SW_SHOW)

Local $iWait = 20; wait 20ms for next progressstep
Local $iSavPos = 0; progressbar-saveposition

Local $idMsg, $idM
; Loop until the user exits.
Do
    $idMsg = GUIGetMsg()
    If $idMsg = $Button1 Then
        GUICtrlSetData($Button1, "Stop")
        For $i = $iSavPos To 100
            If GUICtrlRead($idProgressbar1) = 50 Then MsgBox($MB_SYSTEMMODAL, "Info", "half is done...", 1)
            $idM = GUIGetMsg()

            If $idM = -3 Then ExitLoop

            If $idM = $Button1 Then
                GUICtrlSetData($Button1, "Next")
                $iSavPos = $i;save the current bar-position to $iSavPos
                ExitLoop
            Else
                $iSavPos = 0
                GUICtrlSetData($idProgressbar1, $i)
                Sleep($iWait)
            EndIf
        Next
        If $i > 100 Then
            ;       $iSavPos=0
            GUICtrlSetData($Button1, "Click")
        EndIf

        If GUICtrlSetData($Button1, "Click") Then
            IniWrite($sConfigPath, "Date", "Input1", GUICtrlRead($Input1))
            IniWrite($sConfigPath, "Title", "Input2", GUICtrlRead($Input2))
            IniWrite($sConfigPath, "Edit", "Edit1", GUICtrlRead($Edit1))
        EndIf

        If IniWrite($sConfigPath, "Edit", "Edit1", GUICtrlRead($Edit1)) Then
            GUICtrlSetData($Button1, "Done")
        EndIf
    EndIf
Until $idMsg = $GUI_EVENT_CLOSE



GUICtrlSetData($Input1, IniRead($sConfigPath, "Date", "Input1", "Date"))
GUICtrlSetData($Input2, IniRead($sConfigPath, "Title", "Input2", "Title"))
GUICtrlSetData($Edit1, IniRead($sConfigPath, "Edit", "Edit1", "Start writing..."))



While 1
    $idMsg = GUIGetMsg()

    Switch $idMsg
        Case $GUI_EVENT_CLOSE
            ; Note: Exit needs to be changed to ExitLoop
            ; for any code after the loop to execute.
            ExitLoop
    EndSwitch

    If $idMsg = $GUI_EVENT_CLOSE Then ExitLoop
    If $idMsg = $Button1 Then SendMyData()
WEnd

Func Button1Click()
    IniWrite($sConfigPath, "Date", "Input1", GUICtrlRead($Input1))
    IniWrite($sConfigPath, "Title", "Input2", GUICtrlRead($Input2))
    IniWrite($sConfigPath, "Edit", "Edit1", GUICtrlRead($Edit1))
EndFunc   ;==>Button1Click

IniWrite($sConfigPath, "Date", "Input1", GUICtrlRead($Input1))
IniWrite($sConfigPath, "Title", "Input2", GUICtrlRead($Input2))
IniWrite($sConfigPath, "Edit", "Edit1", GUICtrlRead($Edit1))

Func SendMyData()
    FileDelete('Settings.ini')
    $data = "[General]" & @CRLF & GUICtrlRead($Input2) & @CRLF & @CRLF & GUICtrlRead($Edit1)
    FileWrite('\Settings.ini', $data)
    MsgBox(0, 'Info', 'Data saved')
EndFunc   ;==>SendMyData
#EndRegion ### END Koda GUI section ###
Edited by NeverDUN

Share this post


Link to post
Share on other sites
abberration

Your program is so simple, progress bars are not necessary. The Do/Until loop is overly complicated. Also, near the end of the program, I see you were deleting the INI file and using FileWrite to write to it. That is very inefficient. I'm posting some simple code that does what you need. Perhaps it can help you see a better way:

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>

Do
    $pass = InputBox("Enter Password", "Please enter the password", "", "*", 150, 120)
    If $pass <> "Password" Then
    EndIf
    If (@error == 1) Then Exit ;
Until $pass == "123"
MsgBox(0, "Success", "Correct password" & @CRLF & "")

Global $sConfigPath = @ScriptDir & "\Settings.ini"

$Form1 = GUICreate("Title", 610, 477, 206, 143)
$Input1 = GUICtrlCreateInput("Date", 480, 16, 113, 21)
$Input2 = GUICtrlCreateInput("Title", 16, 56, 577, 21)
$Edit1 = GUICtrlCreateEdit("", 16, 80, 577, 329)
$Button1 = GUICtrlCreateButton("Save", 520, 424, 75, 25, $BS_DEFPUSHBUTTON)
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
GUICtrlSetColor(-1, 32250)
GUISetState(@SW_SHOW)

$dateRead = IniRead($sConfigPath, "Date", "Input1", "")
$titleRead = IniRead($sConfigPath, "Title", "Input2", "")
$editRead = IniRead($sConfigPath, "Edit", "Edit1", "")
GUICtrlSetData($Input1, $dateRead)
GUICtrlSetData($Input2, $titleRead)
GUICtrlSetData($Edit1, $editRead)

While 1
    $idMsg = GUIGetMsg()
    Switch $idMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            If GUICtrlRead($Button1) = "Save" Then
                IniWrite($sConfigPath, "Date", "Input1", GUICtrlRead($Input1))
                IniWrite($sConfigPath, "Title", "Input2", GUICtrlRead($Input2))
                IniWrite($sConfigPath, "Edit", "Edit1", GUICtrlRead($Edit1))
                GUICtrlSetData($Button1, "Done")
            ElseIf GUICtrlRead($Button1) = "Done" Then
                Exit
            EndIf
    EndSwitch
WEnd
Edited by abberration

RAID Calculator | Software Installer

The truth has been suppressed since the dawn of time.

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  

  • Similar Content

    • Stew
      By Stew
      (Edited from original.  Please note that I AM NOT AN AUTOIT EXPERT.  I write code using Autoit frequently but I am no expert, especially when it comes to I/O.  So any remarks that start with "Why did you..." can be answered by referring to the first sentence.  This project was done in Autoit because of an interface I built to display the data.)
      Attached is a program and ascii input file I wrote to read stock price data, convert it to binary and then read it back into the program in binary.  The goal was to show increased performance for reading the files in binary and provide a demo on how to read/write binary for int32, int64, double and strings for anyone who might find it helpful.  The results on my PC show the following:
      Time to read ascii file only: 456.981951167202
      Ascii read & process time: 6061.83075631701
      Binary write file time: 14787.9184635239
      Time just to read binary file: 42.418867292311
      Binary read and process time: 4515.16129830537
      A couple things to note:
      1) The 32 MB ascii file took 10x longer to read than the 15 MB binary file.  Not entirely sure why.  Both were read into a buffer.
      2) The Binary write takes a long time but I made no effort to optimize this because the plan was to write this file one time only so I don't mind if it takes longer to write this file.  I care much more about how long it takes to read the file because I will be reading it many times.
      3) There was a modest gain in converting the ascii file to binary in terms of file size and reading speed.
      So big picture... not sure it's worth the effort to convert the files to binary even though most of the data is numerical data in the binary file.  That was actually surprising as I expected there would be more of a difference.  Any ideas on how to get the binary data to read at a faster rate would be great.
       
      binary.au3
      2019_02_08.zip
    • jpomalley
      By jpomalley
      Hi all,
      Does anyone know if there is a way to disable the Windows "fade effect" that occurs when a window appears or disappears?
      It is possible for a user to disable visual effects in windows in general through the system properties > performance settings, but I am interested just in fixing it for a particular window that pops up in my app.
      I would like it to appear and disappear instantaneously, snapping in and out, out of nowhere, rather than the short (maybe 300 ms?) fade in/fade out effect that windows has.
      Thanks for any tips
      JP
    • fastman
      By fastman
      I am struggling with activating the 2nd GUI.  References of https://www.autoitscript.com/wiki/Managing_Multiple_GUIs did not help.
      Gui2 and controls are created, but the buttons are not active.  I have tried to remove extra code.
      Thanks for any help.
      ; ; cabinet maker process to automate MasterCam ; ATP nesting process ; #include <AutoItConstants.au3> #include <Array.au3> ;#include <file.au3> ;#include <FileConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> #include <WinAPIFiles.au3> #include <WindowsConstants.au3> ;#include <XML.au3>; If XML library is updated, note that this script requires that save file will overwrite an existing file Opt("GUIOnEventMode", 1) ; 1 = OnEvent mode Opt("WinWaitDelay", 500) ; milliseconds Opt("TrayIconDebug", 1) Opt("WinSearchChildren", 1) Global $hMainGUI Global $hMainGUI2 Func GetAllWindowsControls($hCallersWindow, $bOnlyVisible = Default, $sStringIncludes = Default, $sClass = Default) If Not IsHWnd($hCallersWindow) Then ConsoleWrite("$hCallersWindow must be a handle...provided=[" & $hCallersWindow & "]" & @CRLF) Return False EndIf ; Get all list of controls If $bOnlyVisible = Default Then $bOnlyVisible = True If $sStringIncludes = Default Then $sStringIncludes = "" If $sClass = Default Then $sClass = "" $sClassList = WinGetClassList($hCallersWindow) ; Create array $aClassList = StringSplit($sClassList, @CRLF, 2) ; Sort array _ArraySort($aClassList) _ArrayDelete($aClassList, 0) ; Loop $iCurrentClass = "" $iCurrentCount = 1 $iTotalCounter = 1 If StringLen($sClass) > 0 Then For $i = UBound($aClassList) - 1 To 0 Step -1 If $aClassList[$i] <> $sClass Then _ArrayDelete($aClassList, $i) EndIf Next EndIf For $i = 0 To UBound($aClassList) - 1 If $aClassList[$i] = $iCurrentClass Then $iCurrentCount += 1 Else $iCurrentClass = $aClassList[$i] $iCurrentCount = 1 EndIf $hControl = ControlGetHandle($hCallersWindow, "", "[CLASSNN:" & $iCurrentClass & $iCurrentCount & "]") $text = StringRegExpReplace(ControlGetText($hCallersWindow, "", $hControl), "[\n\r]", "{@CRLF}") $aPos = ControlGetPos($hCallersWindow, "", $hControl) $sControlID = _WinAPI_GetDlgCtrlID($hControl) $bIsVisible = ControlCommand($hCallersWindow, "", $hControl, "IsVisible") If $bOnlyVisible And Not $bIsVisible Then $iTotalCounter += 1 ContinueLoop EndIf If StringLen($sStringIncludes) > 0 Then If Not StringInStr($text, $sStringIncludes) Then $iTotalCounter += 1 ContinueLoop EndIf EndIf If IsArray($aPos) Then ;ConsoleWrite("ControlID=[" & StringFormat("%5s", $sControlID) & "] Handle=[" & StringFormat("%10s", $hControl) & "] ClassNN=[" & StringFormat("%19s", $iCurrentClass & $iCurrentCount) & "] XPos=[" & StringFormat("%4s", $aPos[0]) & "] YPos=[" & StringFormat("%4s", $aPos[1]) & "] Width=[" & StringFormat("%4s", $aPos[2]) & "] Height=[" & StringFormat("%4s", $aPos[3]) & "] IsVisible=[" & $bIsVisible & "] Text=[" & $text & "]." & @CRLF) ConsoleWrite("Func=[GetAllWindowsControls]: ControlCounter=[" & StringFormat("%3s", $iTotalCounter) & "] ControlID=[" & StringFormat("%5s", $sControlID) & "] Handle=[" & StringFormat("%10s", $hControl) & "] ClassNN=[" & StringFormat("%19s", $iCurrentClass & $iCurrentCount) & "] XPos=[" & StringFormat("%4s", $aPos[0]) & "] YPos=[" & StringFormat("%4s", $aPos[1]) & "] Width=[" & StringFormat("%4s", $aPos[2]) & "] Height=[" & StringFormat("%4s", $aPos[3]) & "] IsVisible=[" & $bIsVisible & "] Text=[" & $text & "]." & @CRLF) Else ;ConsoleWrite("ControlID=[" & StringFormat("%5s", $sControlID) & "] Handle=[" & StringFormat("%10s", $hControl) & "] ClassNN=[" & StringFormat("%19s", $iCurrentClass & $iCurrentCount) & "] XPos=[winclosed] YPos=[winclosed] Width=[winclosed] Height=[winclosed] Text=[" & $text & "]." & @CRLF) ConsoleWrite("Func=[GetAllWindowsControls]: ControlCounter=[" & StringFormat("%3s", $iTotalCounter) & "] ControlID=[" & StringFormat("%5s", $sControlID) & "] Handle=[" & StringFormat("%10s", $hControl) & "] ClassNN=[" & StringFormat("%19s", $iCurrentClass & $iCurrentCount) & "] XPos=[winclosed] YPos=[winclosed] Width=[winclosed] Height=[winclosed] Text=[" & $text & "]." & @CRLF) EndIf If Not WinExists($hCallersWindow) Then ExitLoop $iTotalCounter += 1 Next ;MsgBox($MB_SYSTEMMODAL, "title", "check console for control list") EndFunc ;==>GetAllWindowsControls ; ======= Func GetAllWindowsControls($hCallersWindow, $bOnlyVisible = Default, $sStringIncludes = Default, $sClass = Default) ========= Func setNestingOverlay() $ovrWidth = 400 $ovrHeight = 60 $ovrLeft = -1 ;$mcamWindow[0] + $nestControlRelative[0] $ovrTop = -1;$mcamWindow[1] + $nestControlRelative[1]+ 10 $hMainGUI = GUICreate("covering mastercam buttons", $ovrWidth, $ovrHeight, $ovrLeft, $ovrTop, -1, $WS_EX_TOPMOST) GUISetOnEvent($GUI_EVENT_CLOSE, "CloseButton2") Local $iOKButton1 = GUICtrlCreateButton("Continue to gui2", 20, 20, 80) GUICtrlSetOnEvent($iOKButton1, "NestResultButtonOverlay") GUISetState(@SW_SHOW, $hMainGUI) GetAllWindowsControls(WinGetHandle("[ACTIVE]")) ;loop to monitor button click While 1 Sleep(50) ; Sleep to reduce CPU usage WEnd ConsoleWrite(" exit loop setNestingOverlay") EndFunc ;==>setNestingOverlay ;=== 2nd gui ======= 2nd gui ======= 2nd gui ======= 2nd gui ======= 2nd gui ======= 2nd gui ==== func NestResultButtonOverlay() $ovrWidth = -1;$mcamWindow[2] - 10 $ovrHeight = 70 ;40 $ovrLeft = -1 ;$mcamWindow[0] + 5 ;+ $nestControlRelative[0] $ovrTop = -1 ;$mcamWindow[1] + $nestControlRelative[1]+ 10 $hMainGUI2 = GUICreate("gui2-- covering nest result buttons", $ovrWidth, $ovrHeight, $ovrLeft, $ovrTop, -1, $WS_EX_TOPMOST) ;width, height, left, top ;GUISetState(@SW_DISABLE + @SW_MINIMIZE, $hMainGUI) ;GUISwitch($hMainGUI2) GUISetOnEvent($GUI_EVENT_CLOSE, "CloseButton2") local $iBackNestingButton = GUICtrlCreateButton("Back to Nesting", 20, 10, 120) GUICtrlSetOnEvent($iBackNestingButton, "backtoNesting") Local $iOKButton2 = GUICtrlCreateButton("Continue for g-Code", 160, 10, 120) GUICtrlSetOnEvent(-1, "generateGCode") ;GUICtrlSetOnEvent($iOKButton2, "generateGCode") Local $iDoneButton2 = GUICtrlCreateButton("Oops go back to vortex", 300, 10, 120) GUICtrlSetOnEvent($iDoneButton2, "CloseButton2") GUISetState(@SW_SHOW, $hMainGUI2) GUISetState(@SW_DISABLE + @SW_MINIMIZE, $hMainGUI) GUISwitch($hMainGUI2) GetAllWindowsControls(WinGetHandle("[ACTIVE]")) While 1 Sleep(50) ; Sleep to reduce CPU usage WEnd ConsoleWrite(" exit loop NestResultButtonOverlay") EndFunc ;==>setNestingOverlay func backtoNesting() msgbox($MB_SYSTEMMODAL, "gui2","backtoNesting") EndFunc Func CloseButton2() msgbox($MB_SYSTEMMODAL, "gui2","CloseButton2") Exit EndFunc func generateGCode() msgbox($MB_SYSTEMMODAL, "gui2","generateGCode") EndFunc ; =========== main =========== main =========== main =========== main =========== main =========== main setNestingOverlay()  
    • Blueman
      By Blueman
      Hey Guys,
      Maybe you can help me with something small.
      It is not terrible but it slows down my script and after a while even crash the script.

      First i explain what i have;
      I have a GUI with a lot of GUICtrlCreateInput controls, lets say 600 pieces.
      All the controls are hidden when the GUI is displayed, i have 3 buttons attached to 200 pieces each.
      When i press button-1 the first 200 controls are showed,
      When i press button-2 the first 200 controls are hidden and the next 200 controls are showed,
      etc, etc.
      This is working perfectly but after a while the GUI is getting slower and slower.
      After a while the controls aren't responding anymore and the script crashes.
      When i compile the script to 64-Bits version the speed is a lot better but you can still see the script slowing down each time i use the buttons.
      I think there has to be a buffer somewhere that is filling each time i show and hide the controls, but how can i clear that buffer without restarting the script?
      Deleting and re-creating the controls didn't help, deleting the entire gui (and controls) and re-creating it didn't help also.
      The only thing that is working is restarting the script.

      Thanks guys!

      PS: If you need a working example i can add it to this topic, just let me know. It is not rocket science, i just create the controls and show/hide them with a while loop and 3 buttons.
       
×