Jump to content
Tosyk

GUICtrlCreateInput is flashing with disable condition

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

Share this post


Link to post
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

 

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

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By kcvinu
      Hi all,
      I am creating a GUI library in Nim with win32 API functions. Even though the syntax is similar to Python, coding is almost similar to C in Nim. 
      I can change the back color of the button in NM_CUSTOMDRAW. But I can't change the button text color. here is my pseudo code.  
      proc setBtnBackColor*(me : Button, lp: LPNMCUSTOMDRAW ) = if lp.uItemState and CDIS_SELECTED : #------------------ btn clicked # Here i am changing the button color with SelectObject & FillRect. elif lp.uItemState and CDIS_HOT : # ----------------Mouse over # Here i am changing the button's mouse hover color with SelectObject & FillRect. else: # -------------------------Default color set # Here i am changing the button's default color with SelectObject & FillRect. # Here i tried---> SetTextColor(lp.hdc, RGB(102, 255, 51) ) #------- But no luck. #------------------------------------------------------------------------- Please guide me. What i am doing wrong here ?  I am returning "CDRF_SKIPDEFAULT" after calling this function.
      Note : I am using subclassed button. So when the parent window receives WM_NOTIFY message, it sends that to my button's WndProc. There i am handling the message.
    • By paw
      I use SetSoundDevice to control my audio devices but the UI was either
       
      blurry like this:
      or unusable like this:

      so I made this horrible thing to add scaling to the GUI:
      #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Change2CUI=y #AutoIt3Wrapper_Res_HiDpi=y #AutoIt3Wrapper_AU3Check_Parameters=-w 3 -w 4 -w 5 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/sf /sv /rm #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <File.au3> ;~ _convertGUI("") If $CmdLine[0] <> 0 Then _convertGUI($CmdLine[1]) Func _convertGUI($sFilePath) If $sFilePath <> "" Then Local $aArray = FileReadToArray($sFilePath) Else ;TEST DATA Local $aArray[6] = ['$H_Res_Language = GUICtrlCreateProgress(5, 120, 210 + 25, 480, 20, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE)) ; $CBS_DROPDOWNLIST)', _ 'Local $h_Ok = GUICtrlCreateButton("Ok", 72, 224, 81, 33, 0)', _ 'GUICreate($Warning_TiTle, 700, 310, -1, -1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX)', _ 'GUICtrlCreateLabel("Output type: ", 30, 130, 65, 20) ;, $SS_RIGHT)', _ '$H_FieldNameEdit = GUICtrlCreateEdit($INP_FieldNameEdit, 100,260+25, 500, 150 - 25) ;comment', 'Local $H_CANCEL = GUICtrlCreateGraphic("Cancel", 224, 224, 97, 33, 0)'] EndIf Local $hTimer = TimerInit(), $iGUIElementCount = 0, $sResult = "", $sFileName = "", $sDrive = "", $sDir = "", $sExtension = "" If @Compiled Then _PathSplit($sFilePath, $sDrive, $sDir, $sFileName, $sExtension) $sFileName = StringRegExpReplace($sFilePath, "^.*\\", "") EndIf For $i = 0 To (UBound($aArray) - 1) If StringRegExp($aArray[$i], "GUICtrlCreate|GUICreate") Then $sResult = _splitComma($aArray[$i]) If Not @error Then $aArray[$i] = $sResult $iGUIElementCount += 1 EndIf Next ConsoleWrite("t = " & TimerDiff($hTimer) & " GUI elements = " & $iGUIElementCount & " lines = " & (UBound($aArray) - 1) & @CRLF) If $sFileName <> "" Then Local $hFile = FileOpen("edited." & $sFileName, 2) _FileWriteFromArray("edited." & $sFileName, $aArray) FileClose($hFile) EndIf Exit EndFunc ;==>_convertGUI Func _splitComma($sString) Local $sSplitResult = "", $sTrimmedR = "", $sTrimmedL = "" Local $aSplit = StringSplit($sString, ',') If Not @error Then $sTrimmedR = "" $sTrimmedL = "" For $j = 1 To $aSplit[0] If StringRegExp($aSplit[1], "(?:.GUICtrlCreateGraphic|GUICtrlCreateProgress|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTreeView)") Then If $j = 1 Then While StringLeft($aSplit[$j], 1) <> '(' $sTrimmedL &= StringLeft($aSplit[$j], 1) $aSplit[$j] = StringTrimLeft($aSplit[$j], 1) WEnd $aSplit[$j] = StringTrimLeft($aSplit[$j], 1) EndIf EndIf If $j = $aSplit[0] Then While StringRight($aSplit[$j], 1) <> ')' $sTrimmedR &= StringRight($aSplit[$j], 1) $aSplit[$j] = StringTrimRight($aSplit[$j], 1) WEnd $aSplit[$j] = StringTrimRight($aSplit[$j], 1) EndIf If StringRegExp($aSplit[$j], "[0-9]") And $aSplit[$j] <> -1 And $aSplit[$j] <> 0 And $aSplit[$j] <> 1 And Not StringInStr($aSplit[$j], ')') Then If StringRegExp($aSplit[$j], "\-|\+") Then ;put parenthesis around + or - $aSplit[$j] = '(' & $aSplit[$j] & ")*$g_DPI" Else $aSplit[$j] = $aSplit[$j] & "*$g_DPI" EndIf EndIf If $j < $aSplit[0] Then $sSplitResult &= $aSplit[$j] & ',' ElseIf $j = $aSplit[0] Then $sSplitResult &= $aSplit[$j] & ')' Else $sSplitResult &= $aSplit[$j] EndIf Next If $sTrimmedR <> "" Then $sSplitResult &= StringReverse($sTrimmedR) If $sTrimmedL <> "" Then $sSplitResult = $sTrimmedL & '(' & $sSplitResult Else SetError(1) Return EndIf ConsoleWrite($sSplitResult & @CRLF) Return $sSplitResult EndFunc ;==>_splitComma
      And now it looks good: 
      but it doesn't work on everything, for example the "GUICtrlCreateLabel("Output type: ", 30, 130, 65, 20) ;, $SS_RIGHT)" (from the autoit3wrapper gui)
      because the comment contains a parenthesis and it would break completely if there were variables as parameters..
      Is there some kind of parser around that I could use instead or maybe someone who has already done something like this?
    • By TXTechie
      Hello Everyone,
      I've developed my own GUI using AutoIt and I'm allowing users to minimize the GUI, but I also want to include some kind of timer so that it will automatically restore the GUI after something like 30 minutes or an hour. However, I also want them to be able to manually restore the GUI by clicking the application's icon in the taskbar.
      I've searched through the forums, but I'm not sure how to get started.
      Any ideas or functions to research are appreciated!
      Regards,
      TX Techie
    • By Rskm
      Hi, recently i created a GUI for some calculations in AutoIT.  The GUI has 2 tabs and on the first tab, it has few inputboxes where i use to click with mouse and start entering the inputs. i recently made some changes in the position of these textboxes. I made this by changing the autoit code file instead of making changes in KODA. Now i cannot click inside these textboxes with mouse. However, i can use TAB key to cycle through/enter input in these input boxes. what could have made the inputboxes not responding to mouseclicks. thanks
    • By TheDcoder
      Hi everyone,
      I am bit stumped as to why I am not able to set the time in the Date control
      #include <DateTimeConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> Example() Func Example() GUICreate("My GUI get date", 200, 200, 800, 200) Local $idDate = GUICtrlCreateDate("1953/04/25", 10, 10, 185, 20, $DTS_TIMEFORMAT) ; to select a specific default format Local $sStyle = "HH:mm:ss" GUICtrlSendMsg($idDate, $DTM_SETFORMATW, 0, $sStyle) ; Set time Local $iRet = GUICtrlSetData($idDate, '13:33:37') ConsoleWrite('GUICtrlSetData returned ' & ($iRet = 1 ? 'success' : 'failure') & @CRLF) GUISetState(@SW_SHOW) ; Loop until the user exits. While GUIGetMsg() <> $GUI_EVENT_CLOSE WEnd MsgBox($MB_SYSTEMMODAL, "Time", GUICtrlRead($idDate)) EndFunc ;==>Example The documentation for GUICtrlSetData clearly mentions that it uses the same format as GUICtrlRead:
      But I get failure
      What gives?
      Thanks for the help in advance!
×
×
  • Create New...