Jump to content

GUICtrlCreateInput is flashing with disable condition


Tosyk
 Share

Recommended Posts

Hi,

Please help me to beat the flashing of input field:

#include <File.au3>
#Include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ColorConstants.au3>

AutoItSetOption("MustDeclareVars", 1)
HotKeySet("{ESC}", "Terminate")

Local $i
Local $sSourceFile, $sDestFileA, $sDestFile3, $sRunWaitA, $sParamsA, $sNewFileNameA, $sFileLogPath, $iFileSize, $ScriptNameWoExt
Local $hGUI, $ProgressBar1, $Label, $Progress, $Progress1, $inpVal, $CheckKeepAlpha, $v1, $sNewFileName, $sDestFile, $sParams, $sRunWait, $LabelStatus, $bMover, $cMover, $qMover, $ExtractAlpha, $FlipY, $ExtractBlue
Local $sDrive, $sFolder, $sFileName, $sExt

;path to image magick tools
Local $sIMConv = 'magick.exe', $sIMPathFull = 'C:\Program Files\ImageMagick\', $sIMPath = FileGetShortName($sIMPathFull & $sIMConv)

;supported input file extensions
Local $Exts = "tga|jpg|bmp|dds|png|tif|jpeg", $sPattern = "\.(?i:" & $Exts & ")", $ExtsPreview = " tga | jpg | bmp | dds | png | tif | jpeg "

Local $ExtOutput = "jpg", $ExtOutput2 = "png"
Local $LogDefaultSize = '70'

If Not $CmdLine[0] Then
    MsgBox($MB_SYSTEMMODAL, "Usage", "Drop " & $ExtsPreview & " file(s)" & @LF & "on " & @ScriptName)
    ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
    Exit
EndIf

If $CmdLine[0] <> 0 Then
    If FileExists($sIMPath) Then
        ProcessFiles()
    Else
        MsgBox(0, $sIMConv & " not found", "File [" & $sIMPathFull & $sIMConv & "] not found" & @CRLF)
        ConsoleWrite("Download Image Magick: " & $sIMConv & " to use this tool." & @CRLF)
    EndIf
Else
    MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
    ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Func ProcessFiles()
    #Region ### START Koda GUI section ### Form=
    $hGUI = GUICreate("Converting to PNG", 300, 285, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate")

    ;PNG Option group
    $cMover = 0
    Local $Group2 = GUICtrlCreateGroup("Options (PNG):", 8, 5+$cMover, 284, 56)
    $CheckKeepAlpha = GUICtrlCreateCheckbox("Keep alpha channel", 24, 30+$cMover, 130, 17)
    $FlipY = GUICtrlCreateCheckbox("Flip Vertical", 160, 30+$cMover, 130, 17)
    GUICtrlSetState($CheckKeepAlpha, $GUI_CHECKED)

    ;JPG Quality Input
    $qMover = 68
    Local $Group1 = GUICtrlCreateGroup("Extraction options (JPG):", 8, 5+$qMover, 284, 86)
    $ExtractAlpha = GUICtrlCreateCheckbox("Extract alpha channel", 24, 28+$qMover, 130, 17)
    $ExtractBlue = GUICtrlCreateCheckbox("Extract blue channel", 160, 28+$qMover, 130, 17)
    $inpVal = GUICtrlCreateInput("90", 20, 56+$qMover, 260, 22)
    GUICtrlSetState($inpVal, $GUI_DISABLE)

    ;Buttons and bar
    $bMover = 92
    $Label = GUICtrlCreateLabel("Press Convert to proceed", 20, 94+$bMover, 220, 20, $SS_LEFT)
    $LabelStatus = GUICtrlCreateLabel("Ready", 20, 153+$bMover, 220, 20, $SS_LEFT)
    $Progress1 = CreateProgress(20, 115+$bMover, 260, 20)
    Local $Button1 = GUICtrlCreateButton("Convert", 206, 150+$bMover, 75, 25)
    GUICtrlSetState ($Button1, $GUI_DEFBUTTON)
    
    ;Initializer
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
                Exit
            Case $ExtractAlpha or $ExtractBlue
                If _IsChecked($ExtractAlpha) or _IsChecked($ExtractBlue) Then
                    GUICtrlSetState($inpVal, $GUI_ENABLE)
                Else
                    GUICtrlSetState($inpVal, $GUI_DISABLE)
                EndIf
            Case $Button1
                GUICtrlSetState($inpVal, $GUI_DISABLE)
                GUICtrlSetState($CheckKeepAlpha, $GUI_DISABLE)
                GUICtrlSetState($Button1, $GUI_DISABLE)
                MainLoop()
                ExitLoop
            Case Else
                ContinueLoop
        EndSwitch
    WEnd
EndFunc   ;==>ProcessFiles

Func Settings()
    If _IsChecked($CheckKeepAlpha) Then
        $v1 = ' '
    Else
        $v1 = ' ' & '-alpha off' & ' '
    EndIf
    
    If _IsChecked($ExtractAlpha) Then
        ;Extracting JPG
        $sSourceFile = '"' & $sSourceFile & '"'
        $sNewFileNameA = ($sFileName & '_a.' & $ExtOutput)
        $sDestFileA = '"' & $sDrive & StringTrimRight($sFolder, 1) & '\' & $sNewFileNameA & '"'
        $sParamsA = '-channel A -separate -quality' & ' ' & GUICtrlRead($inpVal) & ' ' & '-colorspace sRGB'
        $sRunWaitA = $sIMPath & " " & $sSourceFile & " " & $sParamsA & " " & $sDestFileA
    EndIf

    ;Converting PNG
    $sNewFileName = ($sFileName & '.' & $ExtOutput2)
    $sDestFile = '"' & $sDrive & StringTrimRight($sFolder, 1) & '\' & $sNewFileName & '"'
    $sDestFile3 = $sDrive & StringTrimRight($sFolder, 1) & '\' & $sNewFileName
    $sParams = $v1 & '-colorspace sRGB'
    $sRunWait = $sIMPath & " " & $sSourceFile & " " & $sParams & " " & $sDestFile
EndFunc   ;==>Settings

Func MainLoop()
    WriteLogFile()
    ConsoleWrite("File Log Path: " & $sFileLogPath & @LF)

    For $i = 1 To $CmdLine[0]
        $sSourceFile = $CmdLine[$i]
        _PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)
        GUICtrlSetData($ProgressBar1, ($i / $CmdLine[0]) * 100)

        UpdateProgress($Progress1, ($i / $CmdLine[0]) * 100)
        GUICtrlSetData($Label, $sFileName & $sExt)
        GUICtrlSetState($LabelStatus, $GUI_ENABLE)
        GUICtrlSetColor($LabelStatus, $COLOR_BLACK)
        GUICtrlSetData($LabelStatus, 'Converting')
        Sleep(20)

        If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
            If FileExists($sSourceFile) Then
                Settings() ; function of settings
                ConsoleWrite("Full converting path: " & $sRunWaitA & @LF)

                If _IsChecked($ExtractAlpha) Then
                    RunWait(@ComSpec & ' /c ' & $sRunWaitA, '', @SW_HIDE)
                EndIf

                RunWait(@ComSpec & ' /c ' & $sRunWait, '', @SW_HIDE)
            Else
                ConsoleWriteError("File [" & $sSourceFile & "] not found" & @CRLF)
            EndIf

            If FileExists($sDestFile3) Then
                LabelAnim(' .')
                LabelAnim(' . .')
                LabelAnim(' . . .')
                LabelAnim(' . . . OK')
                Sleep(20)
            Else
                LabelAnim(' .')
                LabelAnim(' . .')
                LabelAnim(' . . .')
                GUICtrlSetColor($LabelStatus, $COLOR_RED)
                LabelAnim(' . . . ERROR')

                UpdateLogFile()
            EndIf
        Else
;           MsgBox(0, "Wrong extension", "Extension of file [" & $sFileName & "] is [" & $sExt & "] and not in" & @LF & "[" & $ExtsPreview & "]" & @CRLF)
            ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
;           Terminate()

            LabelAnim(' .')
            LabelAnim(' . .')
            LabelAnim(' . . .')
            GUICtrlSetColor($LabelStatus, $COLOR_RED)
            LabelAnim(' . . . Wrong Extension')
            
            UpdateLogFile()
        EndIf
    Next

    ; Retrieve the file size (in bytes)
    $iFileSize = FileGetSize($sFileLogPath)
    ConsoleWrite("FileLog size: " & $iFileSize & @LF)

    If $iFileSize < $LogDefaultSize Then
        FileDelete($sFileLogPath)
    ElseIf $iFileSize > $LogDefaultSize Then
        FileMove($sFileLogPath, @WorkingDir, $FC_OVERWRITE)
    EndIf

    GUICtrlSetData($Label, "Converting complete")
    Sleep(10)
EndFunc   ;==>MainLoop

Func LabelAnim($Result)
    GUICtrlSetData($LabelStatus, 'Converting' & $Result)
    Sleep(12)
EndFunc

Func RemoveExt($Input)
    Local $ExtArray = StringSplit($Input, ".")
    Return StringReplace($Input, "." & $ExtArray[$ExtArray[0]], "", -1)
EndFunc

Func GetFileName($Input)
    Local $PathArray = StringSplit($Input, "\/")
    Return $PathArray[$PathArray[0]]
EndFunc

;---------------------------------------------------------------
;- Creating file in @tempdir
;---------------------------------------------------------------
Func WriteLogFile()
  ; Create a constant variable in Local scope of the filepath that will be read/written to.
    $ScriptNameWoExt = RemoveExt(GetFileName(@ScriptName))
  $sFileLogPath = (@TempDir & '\' & '_' & $ScriptNameWoExt & '_errorlog_' & @YEAR & '_' & @MON & '_' & @MDAY & '_' & @HOUR & '_' & @MIN & '_' & @SEC & '_.txt')

  If FileExists($sFileLogPath) Then
        FileDelete($sFileLogPath)
    EndIf

  ; Create a temporary file to write data to.
  If Not FileWrite($sFileLogPath, "ImageMagick converter (" & $sIMConv & ") can't convert these files:" & @CRLF) Then
        MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst writing the temporary file.")
        Return False
  EndIf
EndFunc

;---------------------------------------------------------------
;- Update log file in @tempdir
;---------------------------------------------------------------
Func UpdateLogFile()
    ; Open the file for writing (append to the end of a file) and store the handle to a variable.
    Local $hFileOpen = FileOpen($sFileLogPath, $FO_APPEND)
    If $hFileOpen = -1 Then
        MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst writing the temporary file.")
        Return False
    EndIf

    ; Write data to the file using the handle returned by FileOpen.
    FileWriteLine($hFileOpen, ($sFileName & $sExt))
    Sleep(20)

    ; Close the handle returned by FileOpen.
    FileClose($hFileOpen)
EndFunc

;---------------------------------------------------------------
;- Enhanced Progress widget
;---------------------------------------------------------------
Func CreateProgress($x, $y, $w, $h, $Label="")
    Dim $Progress[2]
    $Progress[0] = GuiCtrlCreateProgress($x, $y, $w, $h) ; this is progress bar
    $Progress[1] = GuiCtrlCreateLabel("---", $x+0, $y-21, '', '', $SS_RIGHT) ; this is percentage label
    GUICtrlSetFont($Progress[1], 11, 500, 0, "")
    GUICtrlSetBkColor($Progress[1], $GUI_BKCOLOR_TRANSPARENT)
    Return $Progress
EndFunc

Func UpdateProgress($ProgressID, $Percent, $Label="")
    GUICtrlSetData($ProgressID[0], $Percent)
    GUICtrlSetData($ProgressID[1], $Label & Round($Percent, 1) & "%")
EndFunc

Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked

Func Terminate()
    If WinGetHandle('') <> $hGUI Then
        HotKeySet('{ESC}')
        Send('{ESC}')
        HotKeySet('{ESC}', '_Close')
        Return
    EndIf

    GUIDelete()
    Exit
EndFunc   ;==>Terminate

Exit(0)

the problem caused by this area:

Case $ExtractAlpha or $ExtractBlue
                If _IsChecked($ExtractAlpha) or _IsChecked($ExtractBlue) Then
                    GUICtrlSetState($inpVal, $GUI_ENABLE)
                Else
                    GUICtrlSetState($inpVal, $GUI_DISABLE)
                EndIf

if I remove "or $ExtractBlue" and "or _IsChecked($ExtractBlue)" the input field is not flashing.

p.s.: also my button don't work if I use OR for the "Case" condition.

Edited by Tosyk
Link to comment
Share on other sites

Original:

Case $ExtractAlpha or $ExtractBlue
                If _IsChecked($ExtractAlpha) or _IsChecked($ExtractBlue) Then
                    GUICtrlSetState($inpVal, $GUI_ENABLE)
                Else
                    GUICtrlSetState($inpVal, $GUI_DISABLE)
                EndIf

Fixed:

Case $ExtractAlpha, $ExtractBlue
                If _IsChecked($ExtractAlpha) or _IsChecked($ExtractBlue) Then
                    If GUICtrlGetState($inpVal) = $GUI_DISABLE Then GUICtrlSetState($inpVal, $GUI_ENABLE)
                Else
                    If GUICtrlGetState($inpVal) = $GUI_ENABLE Then GUICtrlSetState($inpVal, $GUI_DISABLE)
                EndIf

 

Link to comment
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
 Share

×
×
  • Create New...