Mein erstes Werk - Taschenrechner

  • Hallo zusammen :)

    ich habe anfang dieser Woche angefangen mich in AutoIt einzuarbeiten und nach ein paar Tutorials und Learning-by-doing möchte ich euch hier meinen selbst geschriebenen Taschenrechner präsentieren.

    Würde mich über Feedback freuen

    Im Momment arbeite ich an der nächsten Version, diese soll einen Speicher beinhalten, vllt kann mir dazu jemand tipps geben ?

    MFG Zuschy

    [autoit]


    #cs ----------------------------------------------------------------------------
    AutoIt Version: 3.3.6.1
    Author: Philip Zuschlag
    Script Function: Taschenrechner
    Template AutoIt script.
    #ce ----------------------------------------------------------------------------
    #include <GUIConstants.au3> ; Includes
    #include <Math.au3>
    AutoItSetOption ("MustDeclareVars") ; Variablen müssen Deklariert werden !
    Global Const $nPi = 3.14159265358979323846264338328 ; Constante
    #region ; Globale Variablen ; Variablen
    Global $Taschenrechner
    Global $Taste1
    Global $Taste2
    Global $Taste3
    Global $Taste4
    Global $Taste5
    Global $Taste6
    Global $Taste7
    Global $Taste8
    Global $Taste9
    Global $Taste0
    Global $TastePlus
    Global $TasteMinus
    Global $TasteMal
    Global $TasteGeteilt
    Global $TasteKomma
    Global $TastePlusMinus
    Global $TasteGleich
    Global $TasteClear
    Global $TasteAllClear
    Global $TastePi
    Global $TasteWurzel
    Global $TasteQuatrieren
    Global $TasteProzent
    Global $TasteBack
    Global $TasteKA
    Global $Ausgabe
    Global $Menu1
    Global $Menu1Item1
    Global $Menu1Item2
    Global $Menu2
    Global $Menu2Item1
    Global $Menu2Item2
    Global $Menu3
    Global $Menu3Item1
    Global $Menu4
    Global $Menu4Item1
    Global $Menu4Item2
    #Endregion
    Func SetHotKeys () ; Hotkeys die leider überflüssig sind -.-* ^^
    HotKeySet("{Numpad1}", "_Nummer1")
    HotKeySet("{Numpad2}", "_Nummer2")
    HotKeySet("{Numpad3}", "_Nummer3")
    HotKeySet("{Numpad4}", "_Nummer4")
    HotKeySet("{Numpad5}", "_Nummer5")
    HotKeySet("{Numpad6}", "_Nummer6")
    HotKeySet("{Numpad7}", "_Nummer7")
    HotKeySet("{Numpad8}", "_Nummer8")
    HotKeySet("{Numpad9}", "_Nummer9")
    HotKeySet("{Numpad0}", "_Nummer0")
    HotKeySet("{Numpaddot}", "_Komma")
    HotKeySet("{NumpadMult}", "_Multi")
    HotKeySet("{NumpadAdd}", "_Addi")
    HotKeySet("{NumpadSub}", "_Subt")
    HotKeySet("{NumpadDiv}", "_Divi")
    HotKeySet("{NumpadEnter}", "_Gleich")
    EndFunc ;==> SetHotKeys
    Func ShowCalculatorGUI () ; GUI des Taschenrechners
    #Region ### START Koda GUI section ### Form=l:\!__philipp__!\koda\forms\taschenrechner.kxf
    $Taschenrechner = GUICreate("Taschenrechner", 202, 246, 373, 216)
    GUISetBkColor(0xA6CAF0)
    $Ausgabe = GUICtrlCreateInput("", 8, 21, 185, 21)
    $Taste1 = GUICtrlCreateButton("1", 8, 160, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste2 = GUICtrlCreateButton("2", 48, 160, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste3 = GUICtrlCreateButton("3", 88, 160, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste4 = GUICtrlCreateButton("4", 8, 128, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste5 = GUICtrlCreateButton("5", 48, 128, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste6 = GUICtrlCreateButton("6", 88, 128, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste7 = GUICtrlCreateButton("7", 8, 96, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste8 = GUICtrlCreateButton("8", 48, 96, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste9 = GUICtrlCreateButton("9", 88, 96, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Taste0 = GUICtrlCreateButton("0", 8, 192, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TastePlus = GUICtrlCreateButton("+", 136, 160, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteMinus = GUICtrlCreateButton("-", 168, 160, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteMal = GUICtrlCreateButton("x", 136, 128, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteGeteilt = GUICtrlCreateButton("÷", 168, 128, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteGleich = GUICtrlCreateButton("=", 136, 192, 57, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlSetCursor (-1, 0)
    $TasteKomma = GUICtrlCreateButton(",", 48, 192, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TastePlusMinus = GUICtrlCreateButton("+/-", 88, 192, 33, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteClear = GUICtrlCreateButton("CE", 136, 96, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteAllClear = GUICtrlCreateButton("AC", 168, 96, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteKA = GUICtrlCreateButton("¤", 168, 56, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteBack = GUICtrlCreateButton("«", 136, 56, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteProzent = GUICtrlCreateButton("%", 104, 56, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteQuatrieren = GUICtrlCreateButton("x ²", 72, 56, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $TasteWurzel = GUICtrlCreateButton("Sqrl", 40, 56, 25, 25, 0)
    GUICtrlSetFont(-1, 7, 800, 0, "Arial")
    $TastePi = GUICtrlCreateButton("Pi", 8, 56, 25, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $Menu1 = GUICtrlCreateMenu("&Optionen")
    $Menu1Item1 = GUICtrlCreateMenuItem("&Speichern", $Menu1)
    $Menu1Item2 = GUICtrlCreateMenuItem("B&eenden (Alt + F4)", $Menu1)
    $Menu2 = GUICtrlCreateMenu("&Tools")
    $Menu2Item1 = GUICtrlCreateMenuItem("Kopieren (Strg + C)", $Menu2)
    $Menu2Item2 = GUICtrlCreateMenuItem("Einnfügen (Strg + V)", $Menu2)
    $Menu3 = GUICtrlCreateMenu("&?")
    $Menu3Item1 = GUICtrlCreateMenuItem("H&elp", $Menu3)
    $Menu4 = GUICtrlCreateMenu("&About")
    $Menu4Item1 = GUICtrlCreateMenuItem("&Programming", $Menu4)
    $Menu4Item2 = GUICtrlCreateMenuItem("Version V 1.3", $Menu4)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    EndFunc ;==> ShowCalculator
    Func GUIMsgAuswerten ($_nMsg) ; Funktionen der Tasten
    Local $_fEnde = False
    Switch $_nMsg
    Case $GUI_EVENT_CLOSE
    $_fEnde = True
    Case $Taste0
    GUICtrlSetData ($Ausgabe, 0, "Input")
    Case $Taste1
    GUICtrlSetData ($Ausgabe, 1, "Input")
    Case $Taste2
    GUICtrlSetData ($Ausgabe, 2, "Input")
    Case $Taste3
    GUICtrlSetData ($Ausgabe, 3, "Input")
    Case $Taste4
    GUICtrlSetData ($Ausgabe, 4, "Input")
    Case $Taste5
    GUICtrlSetData ($Ausgabe, 5, "Input")
    Case $Taste6
    GUICtrlSetData ($Ausgabe, 6, "Input")
    Case $Taste7
    GUICtrlSetData ($Ausgabe, 7, "Input")
    Case $Taste8
    GUICtrlSetData ($Ausgabe, 8, "Input")
    Case $Taste9
    GUICtrlSetData ($Ausgabe, 9, "Input")
    Case $TastePlus
    GUICtrlSetData ($Ausgabe, "+", "Input")
    Case $TasteMinus
    GUICtrlSetData ($Ausgabe, "-", "Input")
    Case $TasteMal
    GUICtrlSetData ($Ausgabe, "*", "Input")
    Case $TasteGeteilt
    GUICtrlSetData ($Ausgabe, "/", "Input")
    Case $TasteKomma
    GUICtrlSetData ($Ausgabe, ".", "Input")
    Case $TastePlusMinus ; Vorzeichen umdrehen
    GUICtrlSetData ($Ausgabe,Execute(GUICtrlRead( $Ausgabe )*-1))
    Case $TasteGleich ; Ausrechnen, Exeute = Berechnen
    GUICtrlSetData ($Ausgabe, Execute(GUICtrlRead($Ausgabe)))
    Case $TasteClear ; Clear
    GUICtrlSetData ($Ausgabe, "")
    Case $TasteAllClear ; ClearAll
    GUICtrlSetData ($Ausgabe, "")
    Case $TasteKA ; Keine Zuweisung
    Beep (400, 200)
    Beep (800, 200)
    Case $TasteBack ; Back-Space
    GUICtrlSetData ($Ausgabe, StringTrimRight( GUICtrlRead( $Ausgabe ), 1 ))
    Case $TasteProzent ; Prozent
    GUICtrlSetData ($Ausgabe, Execute(GUICtrlRead( $Ausgabe )/100))
    Case $TasteQuatrieren ; Quatrieren
    GUICtrlSetData ($Ausgabe, Execute(GUICtrlRead($Ausgabe)*GUICtrlRead($Ausgabe)))
    Case $TasteWurzel ; SQuareRooT - Quadratwurzel
    GUICtrlSetData ($Ausgabe, Sqrt( GUICtrlRead($Ausgabe)))
    Case $TastePi ; Pi
    GUICtrlSetData ($Ausgabe, $nPi, "Input")
    ;----------Menu----------Menu----------Menu----------Menu----------Menu----------Menu----------Menu----------Menu----------
    Case $Menu1Item1 ; Speichern
    $File = "Rechnung.txt"
    FileWrite ($File, GUICtrlRead($Ausgabe)) ;!!!!
    Case $Menu1Item2 ; Beenden
    $_fEnde = True
    Case $Menu2Item1 ; Kopieren
    ClipPut (GUICtrlRead( $Ausgabe))
    Case $Menu2Item2 ; Einfügen
    GUICtrlSetData ($Ausgabe, ClipGet ())
    Case $Menu3Item1 ; Help
    MsgBox( 64, "Hilfe ?", " Irgendwelche Fragen ??" & @CRLF & @CRLF & "philip.zuschlag@googlemail.com" )
    Case $Menu4Item1 ; About
    $sLine1 = "Taschenrechner by Philip Zuschlag"
    $sLine2 = "__Philip.Zuschlag@googlemail.de__"
    MsgBox(64, "About", $sLine1 & @CRLF & @CRLF & $sLine2 )
    Case $Menu4Item2 ; Version
    EndSwitch
    Return $_fEnde
    EndFunc ;==> GUIMsgAuswerten
    Func Main($Anzahl) ; HauptFunktion
    Local $fEnde = False
    SetHotKeys()
    ShowCalculatorGUI()
    While not $fEnde
    $nMsg = GUIGetMsg()
    $fEnde = GUIMsgAuswerten ($nMsg)
    WEnd
    EndFunc ;==> Main
    Main(4) ; Abfrage der Hauptfunktion
    #Region ; HotKey Funktionen ;Zuweiung der Hotkeys
    Func _Gleich()
    GUICtrlSetData ($Ausgabe, Execute(GUICtrlRead($Ausgabe)))
    EndFunc
    Func _Nummer1()
    GUICtrlSetData ($Ausgabe, 1, "Input")
    EndFunc
    Func _Nummer2()
    GUICtrlSetData ($Ausgabe, 2, "Input")
    EndFunc
    Func _Nummer3()
    GUICtrlSetData ($Ausgabe, 3, "Input")
    EndFunc
    Func _Nummer4()
    GUICtrlSetData ($Ausgabe, 4, "Input")
    EndFunc
    Func _Nummer5()
    GUICtrlSetData ($Ausgabe, 5, "Input")
    EndFunc
    Func _Nummer6()
    GUICtrlSetData ($Ausgabe, 6, "Input")
    EndFunc
    Func _Nummer7()
    GUICtrlSetData ($Ausgabe, 7, "Input")
    EndFunc
    Func _Nummer8()
    GUICtrlSetData ($Ausgabe, 8, "Input")
    EndFunc
    Func _Nummer9()
    GUICtrlSetData ($Ausgabe, 9, "Input")
    EndFunc
    Func _Nummer0()
    GUICtrlSetData ($Ausgabe, 0, "Input")
    EndFunc
    Func _Komma()
    GUICtrlSetData ($Ausgabe, ",", "Input")
    EndFunc
    Func _Addi()
    GUICtrlSetData ($Ausgabe, "+", "Input")
    EndFunc
    Func _Subt()
    GUICtrlSetData ($Ausgabe, "-", "Input")
    EndFunc
    Func _Multi()
    GUICtrlSetData ($Ausgabe, "*", "Input")
    EndFunc
    Func _Divi()
    GUICtrlSetData ($Ausgabe, "/", "Input")
    EndFunc
    #EndRegion ; HotKey Funktionen

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Nette Sache, jedoch lässt sich da noch einiges vereinfachen. Zb. könntest du die Variablen zusammenfassen, so im etwa:

    [autoit]

    Global $Taste1 ,$Taste2 ,$Taste3

    [/autoit]
  • Ja sieht ganz gut aus, nur ein paar Tipps:
    Pi=ACos(-1) ist einfacher zu schreiben als die ganze Konstante
    Wenn du es Formal besser gestaltest (leere Zeilen zwischen Funktionen, Tabulator in Schleifen, Funktionen usw.), kannst du später besser Bugs (Fehler) finden (Debuggen)

  • Hi,
    fürs erste Script sehr schön, weiter so!

    Schau mal in Scite im Menü "Extras" nach Tidy (ctrl+t), das formatiert dir deinen Quellcode. Übrigens sind dort noch mehr Tools (Debugging+Trace), welche dir sicher weiterhelfen. Würden diese vorhandenen Funktionen dort genutzt, hätten wir im Forum sicher nur noch 10% der "XXXX funktioniert nicht"-Postings.
    Da du sichtlich Wert auf eine Struktur legst, schau dir mal Arrays an. Gerade wenn du vorhast Scripte wie z.B. den Taschenrechner zu erweitern, vereinfachen Arrays doch einiges. Damit kannst du z.B. die Positionen der Buttons im Scriptkopf definieren und das Aussehen der GUI einfacher anpassen bzw später leichter erweitern.

    Den "Speicher" könntest du auch als Array oder ggf auch als listview/listbox ausführen, wie hast du dir das Handling vorgestellt?

  • Hey,

    peethebee , Danke

    @Faweyr, Danke für den Tip werde es umsetzen

    TheShadowAE, in meinem eigentlichen Script habe ich das so, nur leider wurde es beim kopieren nicht übernommen, auch danke für deinen Tip

    Andy, Danke auch dir das mit Tidy hat super geklappt, Ich werde mir in den nächsten Tagen Arrays mal genauer anschauen weiß im momment nur das es Tabellen sind (!?). Ich habe übers Wochenende bereits die Speicher-Funktion hizugefügt (Die begeisterung vom ersten eigenen Programmm war groß`=D) ich habe es im Momment wiefolgt gelöst

    [autoit]

    Case $TasteMemoryTo ; X in M
    $Memory = GUICtrlRead( $Ausgabe)
    Case $TasteMemoryPlus ; X zu M dazu
    $Memory = Execute(GUICtrlRead( $Ausgabe) + $Memory)
    Case $TasteMemoryLesen ; Zeige M
    GUICtrlSetData ($Ausgabe, $Memory, "Input")
    Case $TasteMemoryClear ; Clear M

    [/autoit]

    Habe also eine Varriable als "Speicher" verwendet. Was haltet ihr davon ? Funktioniert sehr gut !

    MFG Zuschy