Checkbox auf Klick prüfen

  • Hi zusammen,

    ich hab mal wieder ein Problemchen worüber ihr sicher nur müde lächeln könnt ... ;)

    Ich möchte über eine Checkbox anwählen können, ob in einer Inpubox der Text lesbar ist oder eben nicht. Dafür benutze ich in der Inputbox $ES_PASSWORD.

    Jetzt möchte ich aber, dass wenn man die Checkbox anklickt zwischen den Ansichtsarten geswitcht wird. Ich kann zwar über GUICtrlRead auswerten was im Moment ausgewählt ist, aber nicht wenn die Auswahl geändert wird die Ansicht refreshen.

    Ich dachte ich kann irgendwie permant schauen ob die Checkbox angeklickt wurde, und wenn das so ist die Anzeige der Inputbox ändern, habe dazu aber in der Hilfe nix finden können.

    Wäre nett wenn mir hier jemand den entscheidenden Tip geben könnte.

    Danke vorab

    Grüße

    Gippo

    • Offizieller Beitrag

    Hallo!

    Bin momentan nicht zuhause, d.h. ich kann es nicht testen! Sollte aber eigetnlich gehen!

    [autoit]

    #include <GuiConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    GuiCreate("bla")
    GuiCtrlCreateCheckbox("Eine checkbox...",5,5)
    While 1
    $msg = GuiGetMSG()
    If $msg = $Checkbox Then
    If guictrlRead($checkbox) = $GUI_CHECKED Then
    MsgBox(0,"","Checkbox wurde gecklickt auf AN")
    Else
    MsgBox(0,"","Checkbox wurde gecklickt auf OFF")
    EndIf
    EndIf
    WEnd

    [/autoit]


    Mfg Spider

  • Hi,

    danke schon mal für die Antwort. Funkt nicht so gut, $Checkbox ist ja nicht deklariert. Aber das erstellen und prüfen ob gecheckt oder nicht ist ja auch nicht so das Problem.

    Mir gehts eher darum, dass wenn die Checkbox angeklickt wird eine Function ausgeführt werden soll. In meinem Fall ein Switchen einer Inputbox von $ES_PASSWORD auf lesbar oder umgekehrt.

    Ich hoffe ich konnte klar machen worum es mir geht ... ;)

    Grüße

    Gippo

  • tach

    vielleicht probierste das mal mit guictrlsetstyle??? :hm:

    viel spass mein rumtüffteln!!!!

    mfg DjBasslord

    • Offizieller Beitrag

    Hallo!

    Sorry war grade in der Schule als ich es geschrieben hatte! Desswegen hatte ich keine zeit, und konnte es auch nich ausprobieren..Mit Setstyle funktioniert es eben leider nicht! bei manchen styles geht es einfach nicht! Trozdem ist es nicht unmöglich! Hier hab ich mal ein funktionierendes gemacht, hoffe es hilft dir weiter :) :

    [autoit]

    #include <GUIConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    GUICreate("Checkbox", 125, 40, 190, 120, -1, $WS_EX_TOOLWINDOW + $WS_EX_WINDOWEDGE)
    $Checkbox = GUICtrlCreateCheckbox("PW Char", 0, 0, 73, 15)
    $Input = GUICtrlCreateInput(@UserName, 0, 16, 121, 21)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox
    If GUICtrlRead($Checkbox) = $GUI_CHECKED Then
    GUICtrlSendMsg($Input,0xCC,149,0);Hier wird das $EM_SETPASSWORDCHAR (0xCC) auf das input angewendet
    GUICtrlSetState($Input,@SW_UNLOCK);Hier wird das input feld "Aktualiesiert"
    Else
    GUICtrlSendMsg($Input,0xCC,0,0);Hier wirds wider entfernt
    GUICtrlSetState($Input,@SW_UNLOCK);Hier wird das input feld "Aktualiesiert"
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Mfg Spider

  • Hi gtaspider

    Perfekt, genau das ist es ... ! :klatschen:

    Ich hatte vorher versucht die Inputbox einzulesen und dann über exStyle zu ändern. Funktionierte aber nicht so wirklich. Deine Lösung klappt sehr gut.

    Vielen Dank

    Grüße

    Gippo

  • Hi,

    noch eine kleine Anschlussfrage. Ich möchte nicht noch einen extra Thread dazu aufmachen, daher hier:

    Ist es möglich bei _FileListToArray im Filter mehrere Dateien anzugeben?

    Hab mir das in etwa so vorgestellt:

    $files = _FileListToArray($folder, "*.ini" & ";*.txt")

    Das funzt so schonmal nicht ... ;)

    Wenn nicht, muss ich das dann wahrscheinlich in einer Schleife machen und die Suchergnisse dem Array hinzufügen. Oder hat jemand eine bessere Idee?

    Grüße

    Machtin

    Edit: eingedeutscht

    Einmal editiert, zuletzt von Machtin (17. Januar 2007 um 15:17)

    • Offizieller Beitrag

    Hallo!

    Also soweit ich weis geht das leider nicht! Du könntest ja aber z.b. die funktionen 2mal aufrufen also z.b. so:

    [autoit]

    #include <file.au3>
    $ar1 = _FileListToArray(@WindowsDir,"*.ini")
    $ar2 = _FileListToArray(@WindowsDir,"*.txt")

    [/autoit][autoit][/autoit][autoit]

    $msgout = "FileListToArray Example"&@CRLF&@CRLF&"Die INI Dateien:"&@CRLF

    [/autoit][autoit][/autoit][autoit]

    for $i = 1 To $ar1[0]
    $msgout &= $ar1[$i]&@CRLF
    Next

    [/autoit][autoit][/autoit][autoit]

    $msgout &= @CRLF&@CRLF&"Die TXT Dateien:"&@CRLF

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To $ar2[0]
    $msgout &= $ar1[$i]&@CRLF
    Next

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,@WindowsDir,$msgout)

    [/autoit]

    Oder du machst es halt in dem du als WildCard *.* eingibst und dann immer in z.b einer for schleife nachguckst ob die erweiterung ini bzw txt ist!

    Mfg Spider

  • Zitat

    Original von gtaspider
    Hallo!

    Also soweit ich weis geht das leider nicht!

    Schade, hatte ich aber schon befürchtet ...

    Zitat


    Du könntest ja aber z.b. die funktionen 2mal aufrufen also ...

    Mfg Spider

    So werd ich es jetzt auch machen, du warst mir mal wieder eine große Hilfe.

    Jetzt muss ich mich nur noch etwas mehr in das Thema arrays einarbeiten, schaut manchmal sehr komplex aus ... [dies]&[das]. Dazu gibts hier ja zum Glück ne Menge Lesestoff ;)


    Grüße

    Machtin

    • Offizieller Beitrag

    HI,

    alles möglich:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Description: lists all or preferred files and or folders in a specified path (Similar to using Dir with the /B Switch)
    ; Syntax: _FileListToArrayEx($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '')
    ; Parameter(s): $sPath = Path to generate filelist for
    ; $sFilter = The filter to use. Search the Autoit3 manual for the word "WildCards" For details, support now for multiple searches
    ; Example *.exe; *.txt will find all .exe and .txt files
    ; $iFlag = determines weather to return file or folders or both.
    ; $sExclude = exclude a file from the list by all or part of its name
    ; Example: Unins* will remove all files/folders that start with Unins
    ; $iFlag=0(Default) Return both files and folders
    ; $iFlag=1 Return files Only
    ; $iFlag=2 Return Folders Only
    ;
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path
    ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors
    ; @Error or @extended = 1 Path not found or invalid
    ; @Error or @extended = 2 Invalid $sFilter or Invalid $sExclude
    ; @Error or @extended = 3 Invalid $iFlag
    ; @Error or @extended = 4 No File(s) Found
    ;
    ; Author(s): SmOke_N
    ; Note(s): The array returned is one-dimensional and is made up as follows:
    ; $array[0] = Number of Files\Folders returned
    ; $array[1] = 1st File\Folder
    ; $array[2] = 2nd File\Folder
    ; $array[3] = 3rd File\Folder
    ; $array[n] = nth File\Folder
    ;
    ; All files are written to a "reserved" .tmp file (Thanks to gafrost) for the example
    ; The Reserved file is then read into an array, then deleted
    ;===============================================================================
    #include<array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hFilesFolders = _FileListToArrayEx("c:\Downloads", '*.au3;*.txt', Default, "")

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($hFilesFolders, 'Exe and Txt')
    Func _FileListToArrayEx($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '')
    If Not FileExists($sPath) Then Return SetError(1, 1, '')
    If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
    If $iFlag = -1 Or $iFlag = Default Then $iFlag = 0
    If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
    Local $aBadChar[6] = ['\', '/', ':', '>', '<', '|']
    For $iCC = 0 To 5
    If StringInStr($sFilter, $aBadChar[$iCC]) Or _
    StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
    Next
    If StringStripWS($sFilter, 8) = '' Then Return SetError(2, 2, '')
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, '')
    Local $oFSO = ObjCreate("Scripting.FileSystemObject"), $sTFolder
    $sTFolder = $oFSO.GetSpecialFolder(2)
    Local $hOutFile = @TempDir & $oFSO.GetTempName
    If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
    Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $sRead
    For $iCC = 1 To $aSplit[0]
    If StringStripWS($aSplit[$iCC], 8) = '' Then ContinueLoop
    If StringLeft($aSplit[$iCC], 1) = '.' And _
    UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then $aSplit[$iCC] = '*' & $aSplit[$iCC]
    RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & '\' & $aSplit[$iCC] _
    & '" /b /o-e /od > "' & $hOutFile & '"', '', @SW_HIDE)
    $sRead &= FileRead($hOutFile)
    If Not FileExists($hOutFile) Then Return SetError(4, 4, '')
    FileDelete($hOutFile)
    Next
    If StringStripWS($sRead, 8) = '' Then SetError(4, 4, '')
    Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($sRead), 1), @LF)
    Local $sHold
    For $iCC = 1 To $aFSplit[0]
    If $sExclude And StringLeft($aFSplit[$iCC], _
    StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then ContinueLoop
    Switch $iFlag
    Case 0
    $sHold &= $aFSplit[$iCC] & Chr(1)
    Case 1
    If StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
    $sHold &= $aFSplit[$iCC] & Chr(1)
    Case 2
    If Not StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
    $sHold &= $aFSplit[$iCC] & Chr(1)
    EndSwitch
    Next
    If StringTrimRight($sHold, 1) Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
    Return SetError(4, 4, '')
    EndFunc

    [/autoit]

    So long,

    Mega