Mit Button Inputfeld auslesen und in einer Funktion wiedergeben

  • Hallo,

    ich programmiere schon seid ein paar Jahren hatte eine pause von über einem Jahr und jetzt weis ich nicht mehr eine einfache Programmierung. Bitte könnt ihr mir helfen?

    Und zwar möchte ich mit einem Button in einer GUI ein Inputfeld auslesen und den inhalt dann in einer Funktion wiedergeben. bevorzuge in dem Inputfeld zahlen da es ein script sein sollin dem ein Countdown läuft.

    ich stelle mir das ungefähr so vor:

    [autoit]


    #include <GUIConstants.au3>
    #Include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 403, 237, 443, 214, BitOR($WS_SYSMENU,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS))
    $minuten = GUICtrlCreateInput("Minuten", 120, 112, 145, 21)
    $Label1 = GUICtrlCreateLabel("Bitte geben Sie hier die Gewünschte Laufzeit ein!", 8, 24, 374, 24)GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Zeit setzen", 152, 160, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $string = GUICtrlRead($minuten)

    EndSwitch
    WEnd

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

    ; Variablen
    $titel = "Restlaufzeit" ; Titel, es wird auch ein Info Icon mit angezeigt
    $DauerStd = 0 ; Dauer in Stunden
    $DauerMin = $string ; Dauer in Minuten --- Hier soll der ausgelesene Inputfeldinhalt eingegeben werden funktioniert aber so leider nicht ----
    $DauerSek = 0; Dauer in Sekunden
    $DauerGesammt = (60*60*$DauerStd)+(60*$DauerMin)+$DauerSek ; Die Gesamtdauer
    $Befehl = "cmd" ; Der Befehl der ausgeführt werden soll, es kann auch die _toDo() Fuktion angepasst werden

    [/autoit]


    kann mir bitte jemand helfen? ich suche und suche nach einer Lösung doch leider bleibt sie versteckt.

    wenn einer Helfen kann wäre es super :)

    Mfg,
    Ququknfe

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 403, 237, 443, 214, BitOR($WS_SYSMENU,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS))
    $minuten = GUICtrlCreateInput("Minuten", 120, 112, 145, 21)
    $Label1 = GUICtrlCreateLabel("Bitte geben Sie hier eine Zahl ein!", 8, 24, 374, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Zeit setzen", 152, 160, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $string = GUICtrlRead($minuten)
    foo ($string)
    EndSwitch
    WEnd

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

    Func foo ($s)
    MsgBox (0, '', $s)
    EndFunc

    [/autoit]

    Damit der Code richtig formatiert angezeigt wird, benutz bitte in Zukunft den Reiter 'Quellcode' anstatt 'Editor', beim Posten.

  • [autoit]


    Case $Button1
    $string = GUICtrlRead($minuten)
    ; Variablen
    $titel = "Restlaufzeit" ; Titel, es wird auch ein Info Icon mit angezeigt
    $DauerStd = 0 ; Dauer in Stunden
    $DauerMin = $string ; Dauer in Minuten --- Hier soll der ausgelesene Inputfeldinhalt eingegeben werden funktioniert aber so leider nicht ----
    $DauerSek = 0; Dauer in Sekunden
    $DauerGesammt = (60*60*$DauerStd)+(60*$DauerMin)+$DauerSek ; Die Gesamtdauer
    $Befehl = "cmd" ; Der Befehl der ausgeführt werden soll, es kann auch die _toDo() Fuktion angepasst werden
    MsgBox(0, "Countdown", $DauerGesammt) ; Test
    EndSwitch

    [/autoit]


    Wenn ich jetzt noch wüsste, wie du das Ergebnis genau wiedergeben willst, könnte ich dir dabei vielleicht auch helfen.

  • der countdown soll in einem traytip stattfinden!!

    Immer schön cool bleiben...

    Dann eben am Anfang des Skriptes

    [autoit]

    Global $Time = 0, $Timer

    [/autoit]

    ,

    [autoit]

    MsgBox(0, "Countdown", $DauerGesammt) ; Test

    [/autoit]

    durch

    [autoit]

    $Time = $DauerGesammt
    $Timer = TimerInit()
    AdlibRegister("Countdown", 1000)

    [/autoit]

    ersetzen und dann noch die Funktion Countdown hinzufügen:

    [autoit]

    Func Countdown()
    Local $x = $Time - TimerDiff($Timer)/1000
    TrayTip("Countdown", $x, 1)
    If ($x <= 0) Then AdlibUnRegister("Countdown")
    EndFunc

    [/autoit]
  • So in etwa (ungetestet):

    [autoit]

    #include <GUIConstants.au3>
    #Include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $Time = 0, $Timer

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 403, 237, 443, 214, BitOR($WS_SYSMENU,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS))
    $minuten = GUICtrlCreateInput("Minuten", 120, 112, 145, 21)
    $Label1 = GUICtrlCreateLabel("Bitte geben Sie hier die Gewünschte Laufzeit ein!", 8, 24, 374, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Zeit setzen", 152, 160, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $string = GUICtrlRead($minuten)
    ; Variablen
    $titel = "Restlaufzeit" ; Titel, es wird auch ein Info Icon mit angezeigt
    $DauerStd = 0 ; Dauer in Stunden
    $DauerMin = $string ; Dauer in Minuten --- Hier soll der ausgelesene Inputfeldinhalt eingegeben werden funktioniert aber so leider nicht ----
    $DauerSek = 0; Dauer in Sekunden
    $DauerGesammt = (60*60*$DauerStd)+(60*$DauerMin)+$DauerSek ; Die Gesamtdauer
    $Befehl = "cmd" ; Der Befehl der ausgeführt werden soll, es kann auch die _toDo() Fuktion angepasst werden
    $Time = $DauerGesammt
    $Timer = TimerInit()
    AdlibRegister("Countdown", 1000)
    EndSwitch
    WEnd

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

    Func Countdown()
    Local $x = $Time - TimerDiff($Timer)/1000
    TrayTip("Countdown", $x, 1)
    If ($x <= 0) Then AdlibUnRegister("Countdown")
    EndFunc

    [/autoit]

    MfG, James

    Edit: Ein TrayTip eignet sich für solche häufigen Aktualisierungen nicht, daher hätte ich einen ToolTip genommen. Dazu müsste man aber auch nur ein paar Kleinigkeiten ändern.

  • ja in tooltip hab ich schon einiges programmiert werde des wohl auch in tooltip machen ich hätte noch eine frage und zwar mit dieser programmierung wird ja alles noch in millisekunden angezeigt ich hätte gerne dass man daraus ganz einfach Std, Min, Sek, lesen kann dazu hätte ich diesen script

    [autoit]


    Func _Sek2StdMinSek($value)
    ; Hier eine kleine Auswahl von Formaten, diese bitte bei dem Return Befehl mit angeben.
    $format1 = "%02d:%02d:%02d"
    $format2 = "%02d:%02d"
    $format3 = "%02d Std. %02d Min. %02d Sek."
    $format4 = "%02d Std. %02d Min."

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

    $std = Floor($value / (60*60)) ; Berechnung der Stunden
    $value = $value - ((60*60) * $std) ; Berechnung des Restwertes der Sekunden
    $min = Floor($value / (60)) ; Berechnung der Minuten
    $sek = $value - ((60) * $min) ; Rest Sekunden

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

    Return StringFormat($format3,$std,$min,$sek) ; Rückgabe des formatierten Strings
    EndFunc

    [/autoit]

    aber wenn ich versuche das einzubauen funktioniert es schon nicht mehr kannst du mir sagen wie ich diesen script in diesem TrayTip oder ToolTip wirksam machen kann?

  • WOW danke für deine Hilfe jetzt funktioniert das genauso wie ich es mir vorgestellt habe, übrigens habe deinen Rat befolgt und aus dem TrayTip ein ToolTip gemacht.

    Vielleicht kannst du mir noch in einer einzigen sache helfen und zwar möchte ich die eingabe beim Inputfeld auf Zahlen von 0-9 beschränken keine buchstaben und die max. eingabezahl z.B. 3 Zahlen ginge das? habe bisher immer programmiert ohne etwas zu beschränken

  • zu 1) Bei GUICtrlCreateInput als Style 0x2000 angeben, das müsste $ES_NUMBER sein oder so.
    zu 2) Schau' dir mal GUICtrlSetLimit an. Hab' ich noch nie wirlich benutzt, könnte dir aber helfen.

  • Zitat

    ich habs versucht aber es führt dann des programm nicht mehr aus sondern sagt da is ein Fehler bei dem Dollar Zeichen :D


    Dann füg mal am Scriptanfang #include <EditConstants.au3> ein (dort ist diese Konstante mit einigen anderen deklariert), oder Benutz stattdessen einfach den Hexadezimalwert von James: 0x2000.