Input Feld und Radiobutton Steuern

  • [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 579, 283, 192, 124)
    $Label1 = GUICtrlCreateLabel("Bitte Betrag eingeben", 48, 32, -1, 17)
    $Label2 = GUICtrlCreateLabel("Bitte Betrag eingeben", 224, 32, -1, 17)
    $Label3 = GUICtrlCreateLabel("Zwischensumme", 400, 32, 124, 17)
    $Input1 = GUICtrlCreateInput("", 48, 56, 129, 21)
    $Input2 = GUICtrlCreateInput("", 224, 56, 129, 21)
    $Input3 = GUICtrlCreateInput("", 400, 56, 129, 21)
    $Button1 = GUICtrlCreateButton("Rechen", 424, 200, 97, 33, $WS_GROUP)
    $Group1 = GUICtrlCreateGroup("", 48, 88, 129, 169)
    $Radio1 = GUICtrlCreateRadio(" + 1,00€ ", 72, 105, -1, 25)
    $Radio2 = GUICtrlCreateRadio(" + 2,00€ ", 72, 135, -1, 25)
    $Radio3 = GUICtrlCreateRadio(" + 3,00€ ", 72, 165, -1, 25)
    $Radio4 = GUICtrlCreateRadio(" + 4,00€ ", 72, 195, -1, 25)
    $Radio5 = GUICtrlCreateRadio(" + 5,00€ ", 72, 225, -1, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    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
    ;Hier soltest du dann einfach hinschreiben
    ;was passieren soll
    ;z.B. so
    $Wert1 = GUICtrlRead($Input1)
    $Wert2 = GuiCtrlRead($Input2)
    If StringRight($Wert1, 1) = "€" Then
    $Wert1 = StringLeft($Wert1, StringLen($Wert1)-1)
    EndIf
    If StringRight($Wert2, 1) = "€" Then
    $Wert2 = StringLeft($Wert2, StringLen($Wert2)-1)
    EndIf
    Local $add
    Switch $GUI_CHECKED
    Case GuiCtrlRead($Radio1)
    $add = 1
    Case GuiCtrlRead($Radio2)
    $add = 2
    Case GuiCtrlRead($Radio3)
    $add = 3
    Case GuiCtrlRead($Radio4)
    $add = 4
    Case GuiCtrlRead($Radio5)
    $add = 5
    Case Else
    ConsoleWrite(GuiCtrlRead($Radio1) & @CRLF)
    ConsoleWrite(GuiCtrlRead($Radio2)& @CRLF)
    ConsoleWrite(GuiCtrlRead($Radio3)& @CRLF)
    ConsoleWrite(GuiCtrlRead($Radio4)& @CRLF)
    ConsoleWrite(GuiCtrlRead($Radio5)& @CRLF)
    EndSwitch
    GUICtrlSetData($Input3, $Wert1 + $Wert2 + $add & "€")
    EndSwitch
    WEnd

    [/autoit]

    Hallo zusammen,

    ich habe noch Vier fragen:

    1. Ist es möglich $Input1 so zu Steuern, wenn die Eingabe unter 10,00 Euro ist, oder 55,00 Euro übersteigt, dass eine Meldung erscheint ?

    2. Ist es möglich wenn kein Radio Button gewählt wurde das dann eine Meldung erscheint ?

    3. Ist es möglich das mir auch Dezimalstellen angezeigt werden, also nicht wie jetzt 10 € sondern 10,00 € ?

    4. Und für mich das Wichtigste:

    Ich würde gerne diesen Code (wenn es irgendwann fertig ist :whistling: ) in drei Verschiedene Varianten aufbauen...
    Mein Wunsch wäre, eine Hauptmaske zu erstellen, aus der man eine der 3 Varianten Startet das ganze soll
    aber nur eine exe Datei werden und nicht 4 exe Dateien. Das man auch aus einer Variante, einen anderen Starten kann
    aber das immer nur eins Aktiv ist und der andere sich schließt, wenn nach 10 Minuten keine eingaben getätigt wurden
    sich wieder automatisch die Hauptmaske öffnet.

    Wie gesat ich bin neu hier, kenne mich mit den Befehlen von AutoIt noch nicht so gut aus, deshalb frage ich lieber Vorsichtig...


    Ich bitte euch um eure Hilfe.

    Danke und Gruß
    HGF

    Mit freundlichen Grüßen
    HGF

    Das aber nur für die Neunmalklugen unter uns:
    Was du heute säst, wirst du später ernten !

    Spoiler anzeigen

    Meine fertigen Skripte: Copy and Rename

    Einmal editiert, zuletzt von HGF (18. September 2010 um 13:00)

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 579, 283, 192, 124)
    $Label1 = GUICtrlCreateLabel("Bitte Betrag eingeben", 48, 32, -1, 17)
    $Label2 = GUICtrlCreateLabel("Bitte Betrag eingeben", 224, 32, -1, 17)
    $Label3 = GUICtrlCreateLabel("Zwischensumme", 400, 32, 124, 17)
    $Input1 = GUICtrlCreateInput("", 48, 56, 129, 21)
    $Input2 = GUICtrlCreateInput("", 224, 56, 129, 21)
    $Input3 = GUICtrlCreateInput("", 400, 56, 129, 21)
    $Button1 = GUICtrlCreateButton("Rechen", 424, 200, 97, 33, $WS_GROUP)
    $Group1 = GUICtrlCreateGroup("", 48, 88, 129, 169)
    Local $Radio[6]
    $Radio[1] = GUICtrlCreateRadio(" + 1,00€ ", 72, 105, -1, 25)
    $Radio[2] = GUICtrlCreateRadio(" + 2,00€ ", 72, 135, -1, 25)
    $Radio[3] = GUICtrlCreateRadio(" + 3,00€ ", 72, 165, -1, 25)
    $Radio[4] = GUICtrlCreateRadio(" + 4,00€ ", 72, 195, -1, 25)
    $Radio[5] = GUICtrlCreateRadio(" + 5,00€ ", 72, 225, -1, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    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
    $Wert1 = GUICtrlRead($Input1)
    $Wert2 = GUICtrlRead($Input2)
    If StringRight($Wert1, 1) = "€" Then
    $Wert1 = Number(StringTrimRight($Wert1, 1))
    EndIf
    If StringRight($Wert2, 1) = "€" Then
    $Wert2 = Number(StringTrimRight($Wert2, 1))
    EndIf
    If $Wert1 > 55 Or $Wert1 < 10 Then ContinueLoop MsgBox(262144, "Error", "Wert von Input1 größer 55€ oder kleiner 10€.")
    Local $add = ''
    For $i = 1 To 5
    If GUICtrlRead($Radio[$i]) = $GUI_CHECKED Then $add = $i
    Next
    If $add = '' Then ContinueLoop MsgBox(262144, "Error", "Bitte Radio auswählen.")
    GUICtrlSetData($Input3, StringFormat("%.2f", $Wert1 + $Wert2 + $add) & "€")
    EndSwitch
    WEnd

    [/autoit]

    Bei Frage 4 steig ich nocht nicht ganz durch. :(
    Btw. bei der Frage mit den Radios könntest du beim Start einfach den ersten auf Checked setzen, so ist immer einer ausgewählt.

    • das kannst du so lösen [autoit] Case $Input1
      $wert = GuiCtrlRead($Input1)
      if $wert < 10 Then MsgBox(0,"Wert","zu klein")
      if $wert > 55 Then MsgBox(0,"Wert","zu gross")
      ControlFocus($Form1,"",$Input1)
      [/autoit]einfach in der While-Schleife einbauen
    • siehe Vorschlag von blubbstar
    • Um Ausgaben zu formatieren kannst du StringFormat nehmen, allerdings muss auch noch das Dezimaltrennzeichen mit StringReplace getauscht werden. Das ganze sieht dann so aus: [autoit] GUICtrlSetData($Input3,StringReplace(StringFormat("%.2f €",$Wert1 + $Wert2 + $add),".",","))
      [/autoit]
    • ???

    mfg autoBert

  • Danke, blubbstar.

    Danke, autoBert.

    Gruß
    HGF

    Mit freundlichen Grüßen
    HGF

    Das aber nur für die Neunmalklugen unter uns:
    Was du heute säst, wirst du später ernten !

    Spoiler anzeigen

    Meine fertigen Skripte: Copy and Rename

    Einmal editiert, zuletzt von HGF (18. September 2010 um 13:01)

  • zu 4.)
    da die sich ja vom Aufbau schon nicht groß unterscheiden, würde ich mit einer Childgui arbeiten.
    Die legst du dann über das Hauptfenster oder beendest die Hauptgui, wenn nicht child ;) , umschalten kannst du ja auch im Unterprogramm.
    Dann die Inhalte variabel machen, also in der Childgui prüfen was angezeigt werden muss.
    Zum Beispiel die Werte in eine Ini parken. So brauchst du nicht alles doppelt und dreifach.

    Aufbau der Ini
    [Gui1]
    Wert1=1,00€
    Wert2=2,00€
    Wert3=3,00€
    Wert4=4,00€
    Wert5=5,00€
    Label1=
    ...
    Bild1="bild1_1.jpg"
    [Gui2]
    Wert1=1000,00€
    Wert2=2000,00€
    Wert3=3000,00€
    Wert4=4000,00€
    Wert5=5000,00€
    Label1=
    ...
    Bild1="bild2_1.jpg"... usw

    zu den Radiobuttons du kannst auc einen Default auswählen.
    Einfach

    [autoit]

    GUICtrlSetState(-1,$GUI_CHECKED)

    [/autoit]

    unter deinen default Wert schreiben.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Hallo HGF,

    zu 4: ja funktioniert, hier ein Beispielskript dazu:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <Timers.au3>

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

    $gui = GUICreate("Programm", 200, 200) ;Gui 1
    $bt1 = GUICtrlCreateButton("Programm 1", 50, 20) ;Button zur 1. Variante
    $bt2 = GUICtrlCreateButton("Programm 2", 50, 50) ;Button zur 2. Variante
    $bt3 = GUICtrlCreateButton("Programm 3", 50, 80) ;Button zur 3. Variante
    GUISetState(@SW_SHOW, $gui) ;GUI anzeigen

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

    $gui1 = GUICreate("Variante 1", 150, 150, 150, 150) ;Gui für Variante 1
    $close1 = GUICtrlCreateButton("zurück", 50, 50) ;zurück zum Hauptprogramm
    $gui2 = GUICreate("Variante 2", 150, 150, 250, 250) ;Gui für Variante 2
    $close2 = GUICtrlCreateButton("zurück", 50, 50) ;zurück zum Hauptprogramm
    $gui3 = GUICreate("Variante 2", 150, 150, 350, 350) ;Gui für Variante 3
    $close3 = GUICtrlCreateButton("zurück", 50, 50) ;zurück zum Hauptprogramm
    WinSetTrans($gui1, "", 0)
    WinSetTrans($gui2, "", 0)
    WinSetTrans($gui3, "", 0)
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    GUISetState(@SW_HIDE, $gui3)
    Global $actGui = $gui

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

    While 1 ;schleife
    $nMsg = GUIGetMsg(1) ;Die 1 ist wichtig
    Switch $nMsg[1] ;Hier ebenfalls
    Case $gui ;Wenn gui1 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMSG nur mit 0
    Case $bt1 ;Wenn eine Variante 1 aufgerfen wird
    _SetTrans($actGui, $gui1)
    ;$actGui = $gui1
    Case $bt2 ;Wenn eine Variante 2 aufgerfen wird
    _SetTrans($actGui, $gui2)
    ;$actGui = $gui2
    Case $bt3 ;Wenn eine Variante 3 aufgerfen wird
    _SetTrans($actGui, $gui3)
    ;$actGui = $gui3
    Case $GUI_EVENT_CLOSE ;Falls HauptGUI geschlossen wird
    Exit ;Skript schließen
    EndSwitch ;Ende der Switch von dem Haupt GUI
    Case $gui1 ;Falls Variante 1 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMsg und wieder mit 0
    Case $close1, $GUI_EVENT_CLOSE ;Falls Variante 1 geschlossen wird(zurück, X / Alt-F4 / Esc)
    _SetTrans($gui1, $gui)
    $actGui = $gui
    EndSwitch
    Case $gui1 ;Falls Variante 1 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMsg und wieder mit 0
    Case $close1, $GUI_EVENT_CLOSE ;Falls Variante 1 geschlossen wird(zurück, X / Alt-F4 / Esc)
    _SetTrans($gui1, $gui)
    $actGui = $gui
    EndSwitch
    Case $gui2 ;Falls Variante 2 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMsg und wieder mit 0
    Case $close2, $GUI_EVENT_CLOSE ;Falls Variante 2 geschlossen wird(zurück, X / Alt-F4 / Esc)
    _SetTrans($gui2, $gui)
    $actGui = $gui
    EndSwitch
    Case $gui3 ;Falls Variante 3 benutzt wird
    Switch $nMsg[0] ;Wieder switch $nMsg und wieder mit 0
    Case $close3, $GUI_EVENT_CLOSE ;Falls Variante 3 geschlossen wird(zurück, X / Alt-F4 / Esc)
    _SetTrans($gui3, $gui)
    $actGui = $gui
    EndSwitch ;Ende der Switch von dem GUI 2
    EndSwitch ;Ende der switch des allem guis. du kannst so weitermachen mit x GUI's
    WEnd ;schleifenende

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

    Func _CheckIdleTime()
    $iIdleTime = _Timer_GetIdleTime()
    If $iIdleTime > 5000 and $actGui <> 0 Then _SetTrans($actGui, $Gui) ;wenn länger als 5 Sekunden keine Benutzer aktivität zurück zum HauptMenü zurückkehren
    EndFunc ;==>_CheckIdleTime

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

    Func _SetTrans($guiOut, $guiIn)
    if $guiOut <> 0 Then AdlibRegister("_CheckIdleTime", 1000) ;jede Sekunde checken wann die letzte Benutzeraktivität war
    if $guiIn = 0 Then AdlibUnRegister("_CheckIdleTime") ; in der Hauptmaske braucht nicht geprüft werden
    Static $oldGui
    $actGui = $guiIn
    If $oldGui = $actGui Then Return
    $oldGui = $guiIn
    GUISetState(@SW_SHOW, $guiIN) ;guiIN anzeigen
    For $i = 1 To 255
    WinSetTrans($guiOut, "", 255 - $i) ;langsam ausblenden
    WinSetTrans($guiIn, "", $i);langsam einblenden
    Next
    if $guiOut <> $guiIn And $guiOut <> 0 Then GUISetState(@SW_HIDE, $guiOut) ;guiOut verstecken
    EndFunc ;==>_SetTrans

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

    die Methode mit ChildGuis siehe Post Dietmar funktioniert natürlich auch, alternativ könntest du auch mit Tabs arbeiten

    mfg autoBert

  • Danke, autoBert.

    Danke, Dietmar.

    Werde alles ausprobieren, sobald alles läuft werde ich diesen Thread als "gelöst" markieren.

    Gruß
    HGF

    Mit freundlichen Grüßen
    HGF

    Das aber nur für die Neunmalklugen unter uns:
    Was du heute säst, wirst du später ernten !

    Spoiler anzeigen

    Meine fertigen Skripte: Copy and Rename

    Einmal editiert, zuletzt von HGF (18. September 2010 um 13:01)