Problem mit GUI und Auslesen

  • Hi!

    Ich bin da gerade an einem Script dran. Es ist eine Einfache GUI wo es ein Input hat.
    Aber beim Auslesen von dem Input Feld kommt immer die Fehlermeldung:

    Zitat

    $anz_tage = GUICtrlRead($input)
    $anz_tage = GUICtrlRead(^Error)

    Error: Variable used without being declared

    Das ist mir nicht ganz klar. Ist doch ganz eindeutig festgelegt für was die Variable ist.

    Hier mein Code:

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

    ; GUIOnEventMode4 wird mit aktiviert (1)
    Opt("GUIOnEventMode", 1)

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

    ; wird benötigt für SQL Verbindung
    #include "mssql.au3"

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

    ;wird benötigt um GUI zu erzeugen
    #include <GUIConstants.au3>

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

    _gui()

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

    ; ################################################ FUNKTIONEN ################################################

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

    Func _gui()

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

    $Form1 = GUICreate("Softwarekiosk", 435, 184)
    $text = GUICtrlCreateLabel("Geben Sie nun die Anzahl Tage ein, für die Sie die Software nutzen möchten (1 - 7)", 16, 24, 412, 49)
    $text_tage = GUICtrlCreateLabel("Tage: ", 16, 96, 35, 17)

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

    $input = GUICtrlCreateInput("", 64, 96, 49, 21)

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

    $Button_OK = GUICtrlCreateButton("OK", 232, 136, 73, 25, 0)
    GUICtrlSetOnEvent($Button_OK, '_OK');Func _ok wird nach drücken des Buttons ausgeführt
    GUICtrlSetState(-1,$GUI_DEFBUTTON) ;mit "Enter" lässt sich "OK" drücken

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

    $Button_ABORT = GUICtrlCreateButton("Abbrechen", 312, 136, 73, 25, 0)
    GUICtrlSetOnEvent($Button_ABORT, '_exit');Func _ok wird nach drücken des Buttons ausgeführt

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

    GUISetOnEvent($GUI_EVENT_CLOSE, '_exit') ;zum schliessen wird Func. _exit benutzt

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

    GUISetState()

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

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

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

    Case $text
    EndSwitch
    WEnd

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

    EndFunc

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

    Func _OK()

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

    $anz_tage = GUICtrlRead($input)
    MsgBox(0, "test", "Die Softwäre läuft für: " & $anz_tage)

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

    EndFunc

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

    Func _exit()
    Exit;Beendet Programm
    EndFunc

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

    ; ################################################ / FUNKTIONEN ################################################

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • Also diese Fehlermeldung müsste eigentlich bei all deine Variablen stehen.
    Ich kenne jetzt deine AutoIT3 Version nicht, aber seit neusten muss man alle Variablen Deklarieren bevor man sie nutzt.
    Also zB.:
    In dem fall würde ich, weil es sich dabei um ein GUI Handle handelt eine Globale Variable benutzen, auf die du überall zugreifen kannst.

    Spoiler anzeigen
    [autoit]


    Global $input
    $input = GUICtrlCreateInput("", 64, 96, 49, 21)

    [/autoit]


    Der Sinn liegt darin, dass du und dein Compieler genau genau wissen, um was für eine Variable es sich handelt.
    Näheres wahrscheinlich in der Hilfe Datei.

    Gruß
    Patric

  • Tatsächlich jetzt funktionierts. Danke!

    War mir bisher unbekannt, dass man das machen muss. Arbeite eigentlich schon länger mit AutoIT3 und bin nie auf
    so etwas gestossen.

    Danke nochmals

  • Das kann auch erst in der neuesten BETA sein, d es in älteren Versionen(ich nutze noch die 3.2.8.1) immer die Option "MustDeklareVars" gab. Und da bis jetzt niemand so ein Problem geschildert hat, denke ich das es erst seit der neuesten BETA so ist.
    Allerdings fände ich einen Verlust dieser AutoIt Eigenschaft (Variablendeklination nicht im voraus nötig, wie eigentlich bei allen Scriptsprachen) sehr schade.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Allerdings fände ich einen Verlust dieser AutoIt Eigenschaft (Variablendeklination nicht im voraus nötig, wie eigentlich bei allen Scriptsprachen) sehr schade.


    Wie sich die Meinungen doch unterscheiden. Ich bin genau gegenteiliger Ansicht.
    AutoIT wir dadurch viel explizierter (was glaube ich bei vielen Sprachen der Fall ist) und damit ein Stück erwachsener.

    Gruß
    Patric

  • Wers braucht konnte ja bisher Opt("MustDeklareVars", 1) an den Anfang seines Scriptes schreiben. Da ich aber wie gesagt die BETA nicht besitze, kann ich auch nicht sagen, wie es jetzt ist. Vllt. ist die Option ja jetzt Standardmäßig an.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    • Offizieller Beitrag

    Das Problem war einfach, dass die Variable lokal war, weil sie innerhalb einer Funktion ohne den Modifier "Global" angelegt wurde.
    Das ist auch sinnvoll, um Arbeitsspeicher zu sparen.
    Den Sinn der Funktion _gui verstehe ich aber ohnehin nicht -- man kann es doch einfach an die Stelle kopieren...

    @prizma: Das ist bei AutoIt nach wie vor nicht so. Man kann MustDeclareVars anmachen, muss es aber nicht. Default ist es aus. Es gibt keinen Compiler bei AutoIt (Interpretersprache) und auch keine verschiedenen Datentypen (on-the-fly-Konvertierung, siehe auch Hilfe) :).

    peethebee