If-Abfrage in While-Schleife

  • Mit ControlGetText überprüfe ich, ob sich der Text in einem Edit-Feld geändert hat und Enable dann damit einen Button. Dies mache ich anhand einer If-Abfrage, wobei ich aber nicht genau weiß, wo ich diese If-Abfrage einbinden soll.
    Diverse Bsp. im Forum haben mir gezeigt, daß diese in die While-Schleife mit rein muß. Ok und so funktioniert es auch, nur habe ich jetzt als Nebeneffekt, das der Button 'flimmert'. Also bin ich irgendwie in der Schleife 'gefangen'. Mit Exitloop komme ich nicht raus, weil da das ganze Script geschlossen wird. Mit Sleep wird das Flimmern zwar weniger, aber verzögert es sonst auch andere Aktionen, wie zum Bsp. das Script beenden.
    Meine Frage wäre: Wo muß die If-Abfrage denn genau hin und wie bekomme ich, falls es dann noch vorhanden sein sollte, daß Flimmern weg? Oder wie komme ich 'sauber' aus dieser Schleife wieder raus?
    Ich hoffe der Scriptausschnitt reicht um das zu verdeutlichen was ich genau meine.

    THX!

    [autoit]

    While True

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

    $nMsg = GUIGetMsg(1)

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

    if ControlGetText($formHome,"",$editURL) <> $reder then
    GUICtrlSetState ($butSave, $GUI_ENABLE)
    Sleep(100)
    ExitLoop
    EndIf

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

    ; case ...

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

    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Hi,
    meinst du sowas ?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $FlackerSchutz = ""

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

    GUICreate("Form1", 633, 454, 192, 114)
    $Input = GUICtrlCreateInput("Input1", 72, 64, 209, 21)
    $Button = GUICtrlCreateButton("Button1", 64, 96, 81, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $Button
    MsgBox(0, "", "Hallo")
    EndSwitch

    If GUICtrlRead($Input) <> $FlackerSchutz Then
    $FlackerSchutz = GUICtrlRead($Input)
    If $FlackerSchutz = "" Then
    GUICtrlSetState($Button, $GUI_DISABLE)
    Else
    GUICtrlSetState($Button, $GUI_ENABLE)
    EndIf
    EndIf
    WEnd

    [/autoit]
  • Leider nicht. In deinem Script ist ja auch der Button nicht disabled.
    Nochmal kurz: Ich hab ein Editfeld und einen Button der disabled ist. Wenn man jetzt im Editfeld Text ändert (löschen oder hinzufügen), dann wird der Button enabled. Das frage ich mit der If-Abfrage ab und das funktioniert ja auch. Die Frage ist, wo eben die Abfrage

    [autoit]

    if ControlGetText($formHome,"",$editURL) <> $reder then GUICtrlSetState ($butSave, $GUI_ENABLE)

    [/autoit]


    genau hin muß, daß der Button nicht flackert. In die While-Schleife? Wenn ja, wie komme ich da nach Textänderung im Editfeld wieder raus.
    Die einfachste Lösung wäre für mich gewesen, daß ich zum Bsp. 'Case $editURL' setze, wie zum Bsp. 'Case $butSave'. Aber auf einen Klick ins Editfeld wird nicht reagiert.

  • Wenn du überprüfst ob der Button deaktiviert ist und somit überhaupt aktiviert werden muss, sollte der Button nicht mehr flackern ;).

    [autoit]

    if BitAND(GUICtrlGetState($butSave), $GUI_DISABLE) = $GUI_DISABLE And ControlGetText($formHome,"",$editURL) <> $reder then GUICtrlSetState ($butSave, $GUI_ENABLE)

    [/autoit]


    Wo in der Schleife du diese Zeile platzierst ist relativ egal.

  • Ahja, ich glaube da wäre ich nie drauf gekommen. Aber so geht es natürlich perfekt und ich bin wieder glücklich! ;)

    THX!

  • wie wäre es mit sowas...

    [autoit]

    $GUI_Button_ueber = GUICtrlCreateButton("Übertragen", 430, 800, 100, 30)
    GUICtrlSetState($GUI_Button_ueber,$GUI_Disable)
    GUISetState(@SW_SHOW)
    GUISetState()

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

    _IENavigate($oIE, "http://www.amazon.de")
    _IELoadWait($oIE)
    ControlClick("Embedded Internet Explorer", "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "left", 1, 497, 110)

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

    While 1
    $zustandleft = "In welchem"
    $zustandright = "Ihr Artikel?"
    $zustandmitte = " Zustand ist "
    _IELoadWait ($oIE)
    $sText = _IEBodyReadText ($oIE)
    $source3 = _StringBetween($sText, $zustandleft,$zustandright)
    If Not @error Then
    ;~ _ArrayDisplay($source3,"test")
    ;~ MsgBox(0,"",""& $source3[0])
    GUICtrlSetState($GUI_Button_ueber,$GUI_ENABLE)

    [/autoit]

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.