falsche Ausgabe nach GUICtrlCreateInput ?

  • Ich bin neu in diesem Forum.
    Ich habe einige grundsätzliche Fragen zu GUICtrlCreateInput.

    Der nachfolgende Teil eines Skriptes ist nur zum Demonstrieren meiner Schwierigkeiten mit GUICtrlCreateInput.
    Die Variable $TEMP wird mit der Ziffer 3 vorbelegt. Nach GUICtrlCreateInput befindet sich die Ziffer 6 in der Variablen $TEMP. Warum die Ziffer 6 und nicht die Ziffer 3 ?
    Das Gleiche geschieht auch, wenn ich auf die Taste Test klicke. Ich habe dieses Skript auf zwei unterschiedlichen PCs ausprobiert - das Ergebnis war das Gleiche. Probeweise habe ich AutoIt Version 3.3.6.1 deinstalliert und eine frühere Version installiert. Das Ergebnis war ebenfalls das Gleiche.
    Ich möchte in meinem Skript ein Auswahlfeld, welches nur Ziffern/Zahlen akzeptiert, einbauen. Dieses Feld soll dem Benutzer (und auch mir) erlauben, variabel zu reagieren.

    Darf man keine Variable für/in/mit GUICtrlCreateInput verwenden?
    Oder ist meine Denkweise falsch!
    Wie kann ich dies sonst noch gestalten - vielleicht ohne GUICtrlCreateInput aber mit Auf- und Ab - Pfeiltasten?

    #cs

    AutoIt Version 3.3.6.1
    WindowsXP mit SP1

    #ce

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3> ; für GUICtrlCreateInput
    #include <UpdownConstants.au3> ; für GUICtrlCreateUpdown


    Global $msg, $TEMP=3


    Menu()

    Func Menu()

    GUICreate(" Testfenster", 400, 300, Default, 100, $WS_SYSMENU, $WS_EX_CLIENTEDGE)


    GUISetFont(14, 600, 4)
    GUICtrlCreateLabel("ACHTUNG!", 20, 20, 110, 28)

    GUISetFont(14, 400, 1)
    GUICtrlSetColor(-1, 0xFF0000) ; die Schriftfarbe rot
    GUICtrlCreateLabel("Hierhin kommt weiterer Text...", 140, 20, 240, 28)


    GUISetFont(9, 400, 1, "")
    GUICtrlCreateLabel("Test:", 30, 110, 80, 20)
    GUISetFont(20, 400, 1, "")

    ;------------------------------------------------------------------------------------------

    MsgBox(32, "VOR GUICtrlCreateInput", "in der Variablen $TEMP ist: " & $TEMP) ; ZUM TESTEN
    $TEMP = GUICtrlCreateInput($TEMP, 20, 130, 68, 40, $ES_NUMBER + $ES_RIGHT)
    MsgBox(32, "NACH GUICtrlCreateInput", "in der Variablen $TEMP ist: " & $TEMP) ; ZUM TESTEN

    ;------------------------------------------------------------------------------------------

    GUICtrlCreateUpdown($TEMP, $UDS_ARROWKEYS)
    GUICtrlSetCursor(-1, 0) ; den Mauszeiger setzen
    GUICtrlSetLimit(-1, 59) ; das Eingeben/Auswählen begrenzen


    GUISetFont(10, 400, 1, "Arial")
    $Taste_Test = GUICtrlCreateButton("&Test", 20, 200, 160, 40)

    $Taste_Beenden = GUICtrlCreateButton("&Beenden", 220, 200, 160, 40)


    GUISetState()


    While 1
    $msg = GUIGetMsg()

    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit

    Case $msg = $Taste_Test
    Test_Funktion()

    Case $msg = $Taste_Beenden
    Exit

    EndSelect

    WEnd
    EndFunc


    Func Test_Funktion()

    $TEMP = GUICtrlRead($TEMP, 1)

    MsgBox(32, "in der Funktion: Test_Funktion()", "in der Variablen $TEMP ist: " & $TEMP) ; ZUM TESTEN

    GUIDelete()
    Menu ()

    EndFunc


    Vielen Dank für die Hilfe und Anregungen.

  • Hallo fu8558,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deinem Problem: die Variable $Temp enthält nach dem Erstellen des Input-Controls die Id des Inputs (in deinem Fall 6) da du vergessen hast GuiCtrlRead zu verwenden. Ausserdem überschreibst du in Test_Funktion die ControlID (in $Temp) mit dem Inhalt des Controls, das zufällig die ID des in $Temp gespeicherten Wertes hat,

    mfg autoBert

  • Hallo autoBert,
    erstmal vielen Dank daß Du Dich meiner angenommen hast.

    Ich möchte den Inhalt des Controls variabel gestalten, um ihn in einer weiteren Funktion verwenden zu können.
    Diese Funktion soll, wenn sie beendet ist, wieder zum Hauptmenü ( Func Menu() ) zurückkehren und es soll sich
    dabei immer noch der gleiche Wert im Control befinden wie vor dem Aufruf der weiteren Funktion.
    Vielleicht hast Du einen Tip, wie ich dies realisieren kann.

    Vielen Dank im Voraus

  • so in dem du 2 unterschiedliche Variablen nimmst 1 für die ID und 1 für den Inhalt, also so:

    Spoiler anzeigen
    [autoit]

    #cs

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

    AutoIt Version 3.3.6.1
    WindowsXP mit SP1

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

    #ce

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

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3> ; für GUICtrlCreateInput
    #include <UpdownConstants.au3> ; für GUICtrlCreateUpdown

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

    Global $msg, $sTmp1=3, $idInput

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

    Menu()

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

    Func Menu()

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

    GUICreate(" Testfenster", 400, 300, Default, 100, $WS_SYSMENU, $WS_EX_CLIENTEDGE)

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

    GUISetFont(14, 600, 4)
    GUICtrlCreateLabel("ACHTUNG!", 20, 20, 110, 28)

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

    GUISetFont(14, 400, 1)
    GUICtrlSetColor(-1, 0xFF0000) ; die Schriftfarbe rot
    GUICtrlCreateLabel("Hierhin kommt weiterer Text...", 140, 20, 240, 28)

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

    GUISetFont(9, 400, 1, "")
    GUICtrlCreateLabel("Test:", 30, 110, 80, 20)
    GUISetFont(20, 400, 1, "")

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

    ;------------------------------------------------------------------------------------------

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

    ConsoleWrite("VOR GUICtrlCreateInput: in der Variablen $sTmp1 ist: " & $sTmp1 & " $idInput: " & $idInput & @CRLF) ; ZUM TESTEN
    $idInput = GUICtrlCreateInput($sTmp1, 20, 130, 68, 40, $ES_NUMBER + $ES_RIGHT)
    $sTmp1 = GUICtrlRead($idInput)
    ConsoleWrite("NACH GUICtrlCreateInput: in der Variablen $sTmp1 ist: " & $sTmp1 & " $idInput: " & $idInput & @CRLF) ; ZUM TESTEN

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

    ;------------------------------------------------------------------------------------------

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

    GUICtrlCreateUpdown($idInput, $UDS_ARROWKEYS)
    GUICtrlSetCursor(-1, 0) ; den Mauszeiger setzen
    GUICtrlSetLimit(-1, 59) ; das Eingeben/Auswählen begrenzen

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

    GUISetFont(10, 400, 1, "Arial")
    $Taste_Test = GUICtrlCreateButton("&Test", 20, 200, 160, 40)

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

    $Taste_Beenden = GUICtrlCreateButton("&Beenden", 220, 200, 160, 40)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    ; Case $idInput
    ; ConsoleWrite("UpDown: in der Variablen $sTmp1 ist: " & $sTmp1 & " $idInput: " & $idInput & @CRLF) ; ZUM TESTEN
    Case $msg = $Taste_Test
    Test_Funktion()

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

    Case $msg = $Taste_Beenden
    Exit

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

    EndSelect

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

    WEnd
    EndFunc

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

    Func Test_Funktion()

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

    $sTmp1 = GUICtrlRead($idInput)
    ConsoleWrite("Test-Funktio: in der Variablen $sTmp1 ist: " & $sTmp1 & " $idInput: " & $idInput & @CRLF) ; ZUM TESTEN

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

    GUIDelete()
    Menu ()

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

    EndFunc

    [/autoit]

    die nervigen Messageboxen habe ich gegen Consolewrite getauscht, dadurch wird es in der Scite-Konsole ausgegeben,

    mfg autoBert

  • Hallo autoBert,

    vielen Dank für Deinen Tip und Deine Mühe zu später/früher Stunde.
    Ich wußte nicht, daß man GUICtrlRead sofort nach GUICtrlCreateInput zum Auslesen der Variablen benutzen kann um den Wert zu erhalten. Ich hatte angenommen, daß man erst den Wert erhält, nachdem die GUI aufgebaut wurde/ist.

    Nochmals herzlichen Dank und gute Nacht.

  • Hallo fu8558,

    es macht keinen grossen Sinn, da man ja genau das zurückbekommt was man dem Input-Control als Text zugewiesen hat. Was mich noch wundert ist das du bei Test_Funktion die GUI löschst. Diese Funktion sieht normalerweise so aus:

    [autoit]

    Func Test_Funktion()
    $sTmp1 = GUICtrlRead($idInput)
    ConsoleWrite("Test-Funktio: in der Variablen $sTmp1 ist: " & $sTmp1 & " $idInput: " & $idInput & @CRLF) ; ZUM TESTEN
    EndFunc

    [/autoit]

    mfg autoBert

  • Hallo autoBert,

    genau das möchte ich.
    Ich möchte, nachdem in eine weitere Funktion verzweigt wurde, daß das Menü (also die GUI, in welcher sich das Input-Control befindet) wieder erscheint und der vorher eingestellte/ausgewählte Wert in der GUI angezeigt wird.
    Mit dem Löschen der GUI und dem erneuten Aufrufen, möchte ich die GUI aktualisieren.
    Das AutoIt-Skript/Programm soll eine GUI für ein Kommandozeilenprogramm werden. Das heißt, es ist, Dank Deiner Hilfe, wieder etwas fortgeschritten.

    Übrigens wohne ich auch in BaWü.