Taschenrechner will nicht wirklich

  • Hey Leute,

    bin gerade dabei einen kleinen Taschenrechner zu erstellen. Ist mein zweites "Projekt" mit AutoIT.
    Nun habe ich nur ein Problem:
    Die Rechenzeichen sollen mit einem Optionsfeld festgelegt werden, heißt:
    Die Person gibt ihre Zahlen ein und klickt im Optionsfeld auf das Rechenzeichen.
    Nun ist das Problem, dass die gar nicht "gebraucht" werden ...
    Egal welches Rechenzeichen ich benutze, geht auch gar keins, rechnet er jede Aufgabe aus.
    Sprich:
    Ich gebe in die erste InputBox 1 und in die zweite InputBox auch 1 ein.
    Ich klicke im Optionsfeld + an und es öffnet sich eine MsgBox mit dem Ergebnis, so wie es auch soll.
    Kurzgefasst ist das hier das Problem:
    Er rechnet jede Aufgabe aus, egal welches Rechenzeichen gewählt.
    Wenn ich also 1+1 mache kommt als MsgBox die Zahl 2.
    Klicke ich auf ok kommt die Zahl 0 (1-1)
    klicke ich dort auf ok kommt die Zahl 1 (1*1)
    klicke ich dort wieder auf ok kommt die Zahl 1 (1/1)
    Also sind die Rechenzeichen "überflüssig"... Das sollen sie aber nicht.

    Hier mal der Code:


    [autoit]

    #include <ButtonConstants.au3>#include <EditConstants.au3>#include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=C:\Users\Pascal\Desktop\AutoIT\Rechner.kxf$Form1 = GUICreate("Rechner", 323, 229, 757, 404)$Input1 = GUICtrlCreateInput("", 96, 16, 137, 21)$Input2 = GUICtrlCreateInput("", 96, 48, 137, 21)$Label1 = GUICtrlCreateLabel("Erste Zahl:", 40, 16, 55, 17)$Label2 = GUICtrlCreateLabel("Zweite Zahl:", 32, 48, 63, 17)$Button1 = GUICtrlCreateButton("Rechnen", 96, 128, 137, 33)$Button2 = GUICtrlCreateButton("Schließen", 120, 168, 89, 33)$Radio1 = GUICtrlCreateRadio("Plus", 112, 72, 49, 17)$Radio2 = GUICtrlCreateRadio("Minus", 168, 72, 113, 17)$Radio3 = GUICtrlCreateRadio("Mal", 112, 96, 41, 17)$Radio4 = GUICtrlCreateRadio("Geteilt", 168, 96, 113, 17)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###
    While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit
    Case $Button2 Exit
    Case $Button1 $Zahl1 = GUICtrlRead ($Input1) $Zahl2 = GUICtrlRead ($Input2)

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

    IF $Radio1 Then $Zahl3 = $Zahl1 + $Zahl2 MsgBox (0, "Rechner", $Zahl3) EndIf
    IF $Radio2 Then $Zahl3 = $Zahl1 - $Zahl2 MsgBox (0, "Rechner", $Zahl3) EndIf
    IF $Radio3 Then $Zahl3 = $Zahl1 * $Zahl2 MsgBox (0, "Rechner", $Zahl3) EndIf
    IF $Radio4 Then $Zahl3 = $Zahl1 / $Zahl2 MsgBox (0, "Rechner", $Zahl3) EndIf
    EndSwitchWEnd

    [/autoit]

    Soll das so aussehen mit dem Code? So sieht das bei mir im Editor nämlich nicht aus... :/

    Hier mal ein Bild davon:
     [Blockierte Grafik: http://img835.imageshack.us/img835/7594/unbenanntig.png]

  • Radios musst du mit BitAND und $GUI_CHECKED abfragen. Nutz mal die SuFu.

    Edit: So in etwa:

    [autoit]

    If BitAND(GUICtrlRead($radio1), $GUI_CHECKED ) = $GUI_CHECKED Then ...

    [/autoit]

    Einmal editiert, zuletzt von m-obi (21. Mai 2012 um 22:38)

  • Hier, das müsste klappen, probier mal, das zu verstehen. ;)

    Source
    [autoit]


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

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

    #region ### START Koda GUI section ### Form=C:\Users\Pascal\Desktop\AutoIT\Rechner.kxf
    $Form1 = GUICreate("Rechner", 323, 229, 757, 404)
    $Input1 = GUICtrlCreateInput("", 96, 16, 137, 21)
    $Input2 = GUICtrlCreateInput("", 96, 48, 137, 21)
    $Label1 = GUICtrlCreateLabel("Erste Zahl:", 40, 16, 55, 17)
    $Label2 = GUICtrlCreateLabel("Zweite Zahl:", 32, 48, 63, 17)
    $Button1 = GUICtrlCreateButton("Rechnen", 96, 128, 137, 33)
    $Button2 = GUICtrlCreateButton("Schließen", 120, 168, 89, 33)
    $Radio1 = GUICtrlCreateRadio("Plus", 112, 72, 49, 17)
    $Radio2 = GUICtrlCreateRadio("Minus", 168, 72, 113, 17)
    $Radio3 = GUICtrlCreateRadio("Mal", 112, 96, 41, 17)
    $Radio4 = GUICtrlCreateRadio("Geteilt", 168, 96, 113, 17)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button2
    Exit
    Case $Button1
    $Zahl1 = GUICtrlRead($Input1)
    $Zahl2 = GUICtrlRead($Input2)

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

    If BitAND(GUICtrlRead($Radio1), $GUI_CHECKED) = $GUI_CHECKED Then
    $Zahl3 = $Zahl1 + $Zahl2
    MsgBox(0, "Rechner", $Zahl3)
    EndIf
    If BitAND(GUICtrlRead($Radio2), $GUI_CHECKED) = $GUI_CHECKED Then
    $Zahl3 = $Zahl1 - $Zahl2
    MsgBox(0, "Rechner", $Zahl3)
    EndIf
    If BitAND(GUICtrlRead($Radio3), $GUI_CHECKED) = $GUI_CHECKED Then
    $Zahl3 = $Zahl1 * $Zahl2
    MsgBox(0, "Rechner", $Zahl3)
    EndIf
    If BitAND(GUICtrlRead($Radio4), $GUI_CHECKED) = $GUI_CHECKED Then
    $Zahl3 = $Zahl1 / $Zahl2
    MsgBox(0, "Rechner", $Zahl3)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    lg chess

    • Offizieller Beitrag

    Warum liest nur keiner die Hilfe? Da ist doch ein Beispiel dabei.

  • @m-obi
    Ja, der Lerneffekt ist natürlich geringer, aber wir alle wissen, wie es ist, wenn man an einem Script bastelt, und es einfach nicht funktionieren will, egal was man macht & egal, wie lange man es macht. Und wenn man noch in Betracht zieht, dass das eines seiner ersten Projekte ist... Nun, nach meinen ersten Problemen habe ich mich erstmal von AutoIt abgewand... Vielleicht war ich damals mit 11 auch noch zu jung dafür, aber trotzdem. Lieber geringerer Lerneffekt als Aufgabe.^^
    Aber generell sollte man nicht "vorkauen", das stimmt. :P

    lg chess

    • Offizieller Beitrag

    chesstiger , diese Abfrage reicht vollkommen aus:

    [autoit]

    If BitAND(GUICtrlRead($Radio1), $GUI_CHECKED) Then

    [/autoit]
  • Ich versteh hier den Sinn von BitAND nicht...

    Ich lese meine Check- und RadioBoxen immer so aus:

    [autoit]

    If GUICtrlRead($Radio1) = $GUI_CHECKED Then

    [/autoit]

    MfG

    UNPLEASANT SPOILER

    You just lost the game!

    • Offizieller Beitrag

    Ganz einfach, das Control kann mehrer States haben, schau mal genauer in der Hilfe.

    Hier mal die Statetabelle

  • Ganz einfach, das Control kann mehrer States haben, schau mal genauer in der Hilfe.

    Hier mal die Statetabelle

    Spoiler anzeigen

    Soweit klar, dennoch frag ich hier ja sowohl mit der BitAND als auch mit der "=" Variante nur ab, ob das Control den Status $GUI_CHECKED hat, oder seh ich das falsch?

    MfG

    UNPLEASANT SPOILER

    You just lost the game!

  • Das Control kann doch mehrere States haben. Dich interessiert aber nur eins und das musst du mit BitAND ausmaskieren.

  • Hallo,
    schau Dir mal das Beispiel an. Ich habe einige Stellen kommentiert. 8)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    ;i $GUI_EVENT_CLOSE, $GUI_CHECKED —> GUIConstantsEx.au3

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

    #region ### START GUI section ###
    GUICreate("Rechner", 325, 230)
    $Input1 = GUICtrlCreateInput("", 96, 16, 137, 21)
    $Input2 = GUICtrlCreateInput("", 96, 48, 137, 21)
    GUICtrlCreateLabel("Zahl 1 :", 40, 16, 55, 17)
    ;i Keine Variable, da das Ctrl im ganzen Verlauf nicht angesprochen wird
    GUICtrlCreateLabel("Zahl 2 :", 40, 48, 55, 17)
    ;i Keine Variable, da das Ctrl im ganzen Verlauf nicht angesprochen wird
    $radio1 = GUICtrlCreateRadio("Plus", 112, 72, 49, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    ;i Bei Radios ist immer einer Checked
    $radio2 = GUICtrlCreateRadio("Minus", 168, 72, 113, 17)
    $radio3 = GUICtrlCreateRadio("Mal", 112, 96, 41, 17)
    $radio4 = GUICtrlCreateRadio("Geteilt", 168, 96, 113, 17)
    $Button1 = GUICtrlCreateButton("Rechnen", 96, 128, 137, 33)
    $Button2 = GUICtrlCreateButton("Schließen", 120, 168, 89, 33)
    GUISetState(@SW_SHOW)
    #endregion ### START GUI section ###

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

    #region ### START Loop section ###
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE, $Button2
    ;i Beide Möglichkeiten zum Beenden zusammenfassen
    ExitLoop
    Case $Button1
    $Zahl1 = GUICtrlRead($Input1)
    ;i Den 1. Input auslesen
    $Zahl2 = GUICtrlRead($Input2)
    ;i Den 2. Input auslesen

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

    If BitAND(GUICtrlRead($radio1), $GUI_CHECKED) Then
    ;i Hier kommen die Abfragen der Radios
    MsgBox(0, "Rechner", $Zahl1 + $Zahl2)
    ;i und hier die Berechnung innerhalb der MsgBox
    ElseIf BitAND(GUICtrlRead($radio2), $GUI_CHECKED) Then
    MsgBox(0, "Rechner", $Zahl1 - $Zahl2)
    ElseIf BitAND(GUICtrlRead($radio3), $GUI_CHECKED) Then
    MsgBox(0, "Rechner", $Zahl1 * $Zahl2)
    ElseIf BitAND(GUICtrlRead($radio4), $GUI_CHECKED) Then
    MsgBox(0, "Rechner", $Zahl1 / $Zahl2)
    EndIf
    EndSwitch
    WEnd
    #endregion ### START Loop section ###
    ; Ende

    [/autoit]