Inputbox Problem

  • Hallo,

    ich habe folgendes Problem bei einer Inputbox:

    Wenn die Inputbox eine Defaultwert hat, dann soll dieser
    nach einem Timeout ausgegeben werden.
    Der Eintrag erscheint aber in der Msgbox nur wenn
    auf OK geklickt wurde.

    Mein Code

    [autoit]


    _Anzeigen()

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

    Func _Anzeigen()

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

    If Not IsDeclared("sInputBoxAnswer") Then Local $sInputBoxAnswer
    $sInputBoxAnswer = InputBox("Eintrag","Bitte angeben","Ablage"," 50","50","50","50","50","6")

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

    MsgBox(0,"",$sInputBoxAnswer) ;hier sollte nach dem Timeout "Ablage" erscheinen

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

    ; wird etwas anderes eingegeben , dann soll nach dem Timeout der andere Text ausgelesen werden.

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

    Select
    Case @Error = 0 ;OK

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

    Case @Error = 1 ;Cancel

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

    Case @Error = 2 ;Timeout

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

    Case @Error = 3 ;InputBox failed to open

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

    EndSelect

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

    EndFunc

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


    Wie kann man das lösen?
    Habe diverse Varianten getestet, geht immer nur nach dem klicken!

    Liebe Grüße
    Ilse ;)

  • Kannst ja nach dem Timeout überprüfen ob es leer ist und dann deinen Default Wert setzen:

    Spoiler anzeigen
    [autoit]

    _Anzeigen()

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

    Func _Anzeigen()

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

    If Not IsDeclared("sInputBoxAnswer") Then Local $sInputBoxAnswer

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

    $sInputBoxAnswer = InputBox("Eintrag","Bitte angeben","Ablage"," 50","50","50","50","50","6")

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

    If $sInputBoxAnswer="" Then $sInputBoxAnswer = "Ablage"

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

    MsgBox(0,"",$sInputBoxAnswer) ;hier sollte nach dem Timeout "Ablage" erscheinen

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

    ; wird etwas anderes eingegeben , dann soll nach dem Timeout der andere Text ausgelesen werden.

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

    Select
    Case @Error = 0 ;OK

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

    Case @Error = 1 ;Cancel

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

    Case @Error = 2 ;Timeout

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

    Case @Error = 3 ;InputBox failed to open

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

    EndSelect

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

    EndFunc

    [/autoit]
  • Hallo Greek,
    Hallo Stinger 2k

    hatte ich schon probiert. Geht nicht!
    Der Ablauf sollte so sein.

    Also:

    1. Inputbox erscheint mit Ablage - Wert wird nach Timeout übernommen.
    2. Inputbox ein anderer Wert wird eingegeben - Wert wird nach Timeout übernommen.

    Das sollte alles ohne die OK Buttons funktionieren.

    Hier nochmal der Code

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

    _Anzeigen()

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

    Func _Anzeigen()

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

    For $i = 1 to 10
    If Not IsDeclared("sInputBoxAnswer") Then Local $sInputBoxAnswer

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

    $sInputBoxAnswer = InputBox("Eintrag","Bitte angeben","Ablage"," 50","50","50","50","50","4")

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

    ;If $sInputBoxAnswer="" Then $sInputBoxAnswer = "Ablage"

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

    MsgBox(0,"","Angabe aus der Inputbox : " & GuiCtrlRead ($sinputboxanswer),2)

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

    ; wird etwas anderes eingegeben , dann soll nach dem Timeout der andere Text ausgelesen werden.

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

    Select
    Case @Error = 0 ;OK

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

    Case @Error = 1 ;Cancel

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

    Case @Error = 2 ;Timeout

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

    Case @Error = 3 ;InputBox failed to open

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

    EndSelect
    next

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

    EndFunc

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

    Probiere einfach mal nur einen Text einzutragen!
    Der sollte dann kurz angezeigt werden.

    Liebe Grüße
    Ilse ;)

  • Stinger's code ist schonmal unfug, guictrlread hat bei der Nutzung der inputbox Funktion nix zu suchen. Das was du willst geht schlichtweg nicht mit der inputbox, weil diese beim Timeout eben einen leeren String zurück gibt und einen errorcode, steht ja auch so in der Hilfe.

    Wenn müsstest du eben auf ein Timeout verzichten oder dir eine eigene Inputbox basteln (gui + input control + button controls). In letzterem Fall benötigst du dann auch ein guictrlread.

  • Hallo Misterspeed,

    habe eine Gui fertig!
    Kannst du mir helfen wie ich diese Gui
    in der Funktion mit Timeout aufrufen kann?

    D.h. die Gui muß ja dann auch nach einem Timeout schliessen.

    Bin im Moment etwas verwirrt.
    Dachte das wäre einfacher zu lösen.

    Meine Gui

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

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $TextGui = GUICreate("Texteingabe", 375, 125, 304, 156)
    $input = GUICtrlCreateInput("", 24, 40, 329, 24)
    $Label1 = GUICtrlCreateLabel("Bitte den Text eingeben", 24, 16, 145, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    ein ControlClick auf ok wäre das auch "professionell"?

    Liebe Grüße
    Ilse ;)

  • Timer reinmachen:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $diff = 0

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

    $TextGui = GUICreate("Texteingabe", 375, 125, 304, 156)
    $input = GUICtrlCreateInput("", 24, 40, 329, 24)
    $Label1 = GUICtrlCreateLabel("Bitte den Text eingeben", 24, 16, 145, 20)
    GUISetState(@SW_SHOW)

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

    $timestamp = TimerInit()

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

    While $diff<=4000
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch

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

    $diff = TimerDiff($timestamp)

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

    WEnd

    [/autoit]
  • Hallo,

    merci, aber der Timer mit dem Loop macht mir noch Probleme.

    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $diff = 0

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

    $TextGui = GUICreate("Texteingabe", 375, 125, 304, 156)
    $input = GUICtrlCreateInput("", 24, 40, 329, 24)
    $Label1 = GUICtrlCreateLabel("Bitte den Text eingeben", 24, 16, 145, 20)
    GUISetState(@SW_SHOW)

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

    $timestamp = TimerInit()

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

    While $diff<=4000
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    $diff = TimerDiff($timestamp)

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

    ;_Anzeigen()

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

    WEnd

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

    ;For $i = 1 to 10
    MsgBox(0,"",Guictrlread($input),2)
    ;next

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

    Msgbox zeigt an, sollte aber wieder verschwinden
    und die Gui sollte angezeigt werden.

    Da hängt es noch...

    Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (6. November 2011 um 16:02)

  • Hallo,

    läuft jetzt.

    2 Probleme habe ich noch:

    1. Wie kann ich das ganze schliessen! (komme da nicht wieder raus)
    2. Wie kann ich den Fokus erneut auf das Feld setzen und das Feld leeren?


    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $diff = 0

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

    $TextGui = GUICreate("Texteingabe", 375, 125, 304, 156)
    $input = GUICtrlCreateInput("", 24, 40, 329, 24)
    $Label1 = GUICtrlCreateLabel("Bitte den Text eingeben", 24, 16, 145, 20)
    GUISetState(@SW_SHOW)

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

    $timestamp = TimerInit()

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

    While $diff<=2000
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch

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

    While 1

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

    $diff = TimerDiff($timestamp)
    Sleep (4000)
    MsgBox(0,"",Guictrlread($input),1)

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

    GUICtrlSetData($input,"")
    WinActivate("Texteingabe")

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

    wend

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

    WEnd

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


    EDIT: Bis auf das Beenden habe ich es geschafft!

    ;) Ilse

    Einmal editiert, zuletzt von Ilse (6. November 2011 um 16:21)

  • Hi,

    habe es mal so versucht ...

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $sDefInput = "Ablage"
    Global $sInput = ""

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

    $diff = 0

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

    $TextGui = GUICreate("Texteingabe", 375, 125, 304, 156)
    $id_Label1 = GUICtrlCreateLabel("Bitte den Text eingeben", 24, 16, 145, 20)
    $id_input = GUICtrlCreateInput("", 24, 40, 329, 24)
    GUISetState(@SW_SHOW)

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

    $timestamp = TimerInit( )

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

    While ($diff<=4000)

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

    Switch (GUIGetMsg( ))
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch

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

    $diff = TimerDiff($timestamp)

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

    WEnd

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

    $sInput = GUICtrlRead ($id_input)

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

    If ($sInput == "") Then

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

    GUICtrlSetData ($id_input, $sDefInput)
    EndIf

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

    While (TRUE)

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

    Switch (GUIGetMsg( ))
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch

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

    WEnd

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

    Gruß
    Greenhorn


  • Hallo Greenhorn,

    merci für deine Variante.

    Das hier läuft soweit
    bis auf das BEENDEN, das klappt noch nicht!

    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $diff = 0

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

    $TextGui = GUICreate("Texteingabe", 375, 125, 304, 156)
    $input = GUICtrlCreateInput("", 24, 40, 329, 24)
    $Label1 = GUICtrlCreateLabel("Bitte den Text eingeben", 24, 16, 145, 20)
    GUISetState(@SW_SHOW)

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

    $timestamp = TimerInit()

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

    While $diff<=2000
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch

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

    While 1

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

    $diff = TimerDiff($timestamp)
    Sleep (4000)
    MsgBox(0,"",Guictrlread($input),1)

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

    GUICtrlSetData($input,"")
    WinActivate("Texteingabe")
    wend

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

    WEnd

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

    Grüße
    Ilse ;)

  • Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    for $i=1 to 3
    $test = __myinputbox("Quiz","Wer hats erfunden?","keine ahnung")
    MsgBox(0,"Zeit abgelaufen","Deine Antwort war: " & $test)
    Next

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

    Func __myinputbox($titel="mein Titel",$frage="meine Frage",$antwort="Standardantwort",$breite=400,$hoehe=150,$links=-1,$oben=-1,$timeout=5000) ; alles standardwerte die beim funktionsaufruf geändert werden können

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

    Local $myInputGUI = GUICreate($titel, $breite, $hoehe, $links, $oben)
    Local $lFrage = GUICtrlCreateLabel($frage, 20, 20, $breite-40, 40)
    Local $iAntwort = GUICtrlCreateInput($antwort, 20, 80, $breite-40, 20)

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

    GUISetState(@SW_SHOW)

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

    Local $timestamp = TimerInit()
    Local $diff = 0

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

    While $diff <= $timeout
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    $antwort = GUICtrlRead($iAntwort)
    GUIDelete($myInputGUI)
    Return $antwort
    EndSwitch
    $diff = TimerDiff($timestamp)
    WEnd

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

    $antwort = GUICtrlRead($iAntwort)
    GUIDelete($myInputGUI)
    Return $antwort

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

    EndFunc

    [/autoit]
  • ich habe zwar nur den Eröffnungsbeitrag des Themas gelesen und auch gesehen dass einig Profis aktiv waren. Jetzt meine Frage hätte es nicht gereicht den Fehler im Skript GuiCtrlRead($inputBoxAnswer) auszubessern?

    Also so:

    [autoit]

    MsgBox(0,"","Angabe aus der Inputbox : " & $sinputboxanswer,2)

    [/autoit]