Taschenrechner

  • Hallo ihr!

    Ich habe ein Pro mit meinem Taschenrechner:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    $Form1 = GUICreate("Taschenrechner", 176, 411, 305, 176)
    $Label1 = GUICtrlCreateLabel("Zahl1", 8, 8, 31, 17)
    $Label2 = GUICtrlCreateLabel("Zahl2", 8, 88, 31, 17)
    $Label3 = GUICtrlCreateLabel("Zahl3", 8, 168, 31, 17)
    $Label4 = GUICtrlCreateLabel("Zahl4", 8, 248, 31, 17)
    $Number1 = GUICtrlCreateInput("", 40, 8, 121, 21)
    $number2 = GUICtrlCreateInput("", 40, 88, 121, 21)
    $Number3 = GUICtrlCreateInput("", 40, 168, 121, 21)
    $Number4 = GUICtrlCreateInput("", 40, 248, 121, 21)
    $Plus1 = GUICtrlCreateButton("+", 40, 56, 27, 25, 0)
    $Minus1 = GUICtrlCreateButton("-", 72, 56, 27, 25, 0)
    $Mal1 = GUICtrlCreateButton("*", 104, 56, 27, 25, 0)
    $Geteilt1 = GUICtrlCreateButton("/", 136, 56, 27, 25, 0)
    $Plus2 = GUICtrlCreateButton("+", 40, 136, 27, 25, 0)
    $Minus2 = GUICtrlCreateButton("-", 72, 136, 27, 25, 0)
    $Mal2 = GUICtrlCreateButton("*", 104, 136, 27, 25, 0)
    $Geteilt2 = GUICtrlCreateButton("/", 136, 136, 27, 25, 0)
    $Plus3 = GUICtrlCreateButton("+", 40, 216, 27, 25, 0)
    $Minus3 = GUICtrlCreateButton("-", 72, 216, 27, 25, 0)
    $Mal3 = GUICtrlCreateButton("*", 104, 216, 27, 25, 0)
    $Geteilt3 = GUICtrlCreateButton("/", 136, 216, 27, 25, 0)

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

    $Rechne = GUICtrlCreateButton("Rechne!", 40, 344, 121, 25, 0)
    $Rechenzeichen1 = GUICtrlCreateLabel("Rechenzeichen", 64, 32, 79, 17)
    $Rechenzeichen2 = GUICtrlCreateLabel("Rechenzeichen", 64, 112, 79, 17)
    $Rechenzeichen3 = GUICtrlCreateLabel("Rechenzeichen", 64, 192, 79, 17)

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

    $Ergebnis = GUICtrlCreateLabel(",_.-:;*!*;:-._,", 72, 384, 57, 17)
    GUISetState(@SW_SHOW)
    $Add = "+"
    $Sub = "-"
    $Mul = "*"
    $Div = "/"

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Plus1
    GUICtrlSetData($Rechenzeichen1, $Add)
    Case $Minus1
    GUICtrlSetData($Rechenzeichen1, $Sub)
    Case $Mal1
    GUICtrlSetData($Rechenzeichen1, "*")
    Case $Geteilt1
    GUICtrlSetData($Rechenzeichen1, "/")
    Case $Plus2
    GUICtrlSetData($Rechenzeichen2, "+")
    Case $Minus2
    GUICtrlSetData($Rechenzeichen2, "-")
    Case $Mal2
    GUICtrlSetData($Rechenzeichen2, "*")
    Case $Geteilt2
    GUICtrlSetData($Rechenzeichen2, "/")
    Case $Plus3
    GUICtrlSetData($Rechenzeichen3, "+")
    Case $Minus3
    GUICtrlSetData($Rechenzeichen3, "-")
    Case $Mal3
    GUICtrlSetData($Rechenzeichen3, "*")
    Case $Geteilt3
    GUICtrlSetData($Rechenzeichen3, "/")

    Case $Rechne

    $Zahl2 = GUICtrlRead($number2)
    $Zahl3 = GUICtrlRead($Number3)
    $Zahl4 = GUICtrlRead($Number4)
    $Zahl1 = GUICtrlRead($Number1)
    If $Rechenzeichen1 = $Add Then
    $Erg1 = ($Zahl1 + $Zahl2)
    GUICtrlSetData($Ergebnis, $Erg1)
    ElseIf $Rechenzeichen1 = $Sub Then
    $Erg1 = ($Zahl1 - $Zahl2)
    GUICtrlSetData($Ergebnis, $Erg1)
    ElseIf $Rechenzeichen1 = $Mul Then
    $Erg1 = ($Zahl1 * $Zahl2)
    GUICtrlSetData($Ergebnis, $Erg1)
    ElseIf $Rechenzeichen1 = $Div Then
    $Erg1 = ($Zahl1 / $Zahl2)
    GUICtrlSetData($Ergebnis, $Erg1)
    EndIf

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

    EndSwitch

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

    WEnd

    [/autoit]


    Das ist natürlich nur ein Grundgerüst bei dem erst nur du ersten beiden felder funktionieren SOLLTEN ... -.- ... tun sie aber nciht!

    Wenn ich in die ersten beide felder was eingebe und dann auf
    "Rechne!" klicke Passiert einfach garnichts .... Warum ??


    Vielen Dank im Vorraus
    Edit1: Hälfte vergessen ... -.-
    P.s. Warscheinlich ein ganz blöder fehler ...

    Edit2: Ach ja klar ...

    Edit3: So Geändert ... Aber das kann es nicht gewesen sein ... ich glaube es hat was mit der If schleife zu tuhen ... ^^

    Vielen Dank Bugfix

    Edit4: Muss ich vor jeder If abfrage neu $Zahl1 = GUICtrlRead($Number1)
    auslesen ?? ...

    Lenny

    Jaja, Moo does the Cow!

    6 Mal editiert, zuletzt von Lenny (14. Oktober 2007 um 17:33)

    • Offizieller Beitrag

    Du mußt die ausgelesenen Werte auch Variablen zuordnen, sonst kannst du nicht darauf zugreifen:

    [autoit]

    ; falsch:
    GUICtrlRead($number2)
    GUICtrlRead($Number3)
    GUICtrlRead($Number4)
    GUICtrlRead($Number1)
    ; richtig:
    $var1 = GUICtrlRead($number2)
    $var2 = GUICtrlRead($Number3)
    $var3 = GUICtrlRead($Number4)
    $var4 = GUICtrlRead($Number1)

    [/autoit]
  • Das Auslesen muss noch an weiteren stellen passieren:

    [autoit]

    If $Rechenzeichen1 = $Add Then ;FALSCH
    If GUICtrlRead($Rechenzeichen1) = $Add Then ;RICHTIG

    [/autoit]
  • Hallo ihr!

    Dank euren Antworten bin ich schon weit gekommen ... !
    Allerdings hätt ich noch eine Frage:

    Ich komme nicht weiter:

    Also ... ich möchte natürlich das die anderen 2 Felder auch noch ins spiel kommen! ich habe auch schon mehrere sachen ausprobiert ....
    Ehrlich gesagt habe ich keine lust alle *rechn* Entweder 256 Möglichkeiten ... aufzu schreiben also

    wenn $rechenzeichen1 = + ist und $rechenzeichen2 = + ist und $rechenzeichen3= + ist und $rechenzeichen4 = + ist dann

    $Erg1= ($Zahl1 + $Zahl2+$zahl3+$Zahl4)
    GUICtrlSetData($Ergebnis, $Erg1)

    Das würde denn ja uch noch so weiter gehen Also

    wenn $rechenzeichen1 = + ist und $rechenzeichen2 = + ist und $rechenzeichen3= + ist und $rechenzeichen4 = - ist dann
    $Erg1= ($Zahl1 + $Zahl2+$zahl3-$Zahl4)
    GUICtrlSetData($Ergebnis, $Erg1)
    USW...

    Ich denke da gibt es auch noch sinnvollere Lösugen .. =)


    Vielen Dank im Vorraus ... Lenny +

    Jaja, Moo does the Cow!

    Einmal editiert, zuletzt von Lenny (15. Oktober 2007 um 11:55)

    • Offizieller Beitrag

    Ich glaube, es ist wesentlich einfacher, wenn jeder Operator nur einmal auftaucht (als Button).
    Du kannst doch die Rechenoperation komplett als Zeichenkette erfassen, oder noch besser jedes Element in ein Array schreiben (kannst es ja mit 500 Elementen definieren - so lang wird sicher keine Aufgabe).
    Zum Durchführen der Rechnung verwendest du dann Execute().