Kleiner Taschenrechner

  • Ich habe grade mal einen kleinen Taschenrechner geskriptet, um mich mit der OnEvent-Metode vertraut zu machen, da diese mir besser gefällt als Message-Loop.
    Wer noch ne tolle Startgrafik haben möchte, kann das Ganze als WinRar runterladen.
    Da ich dies als Übung gemacht habe, würde ich mich über Vorschläge freuen, was man noch so als Übung skripten könnte.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Frithjof

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

    Script Function:
    Vollwertiger Taschenrechner.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    ;Includes <GUIConstants.au3>

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

    #include

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

    ;Globale Variablen: Bilder, Werte der Editfelder

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

    Global $startbild = @ScriptDir & "\mathe.jpg" , $taschenrechnerbild = @ScriptDir & "\taschenrechner_001.png"

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

    ;...............................................
    ;Startbild:

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

    SplashImageOn("Taschenrechner", $startbild)
    Sleep (1400)
    SplashOff()
    ;...............................................

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

    ;Benutzeroberfläche mit Variablenzuweisungen für die GUI-Id's (Nicht die Werte der Gui's)

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

    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Frithjof\Desktop\Tacehnrechner\Design\Taschenrechner.kxf
    $Form1 = GUICreate("Form1", 461, 506, 188, 125)
    $Label1 = GUICtrlCreateLabel("Zahl 1", 40, 40, 34, 17)
    $Label2 = GUICtrlCreateLabel("Zahl 2", 40, 80, 34, 17)
    $Input1 = GUICtrlCreateInput("Eingabe", 96, 40, 113, 21)
    $Input2 = GUICtrlCreateInput("Eingabe", 96, 80, 113, 21)
    $Button1 = GUICtrlCreateButton("Addieren", 96, 160, 113, 113, 0)
    $Button2 = GUICtrlCreateButton("Subtrahieren", 96, 296, 113, 113, 0)
    $Button3 = GUICtrlCreateButton("Dividieren", 256, 160, 113, 113, 0)
    $Button4 = GUICtrlCreateButton("Multiplizieren", 256, 296, 113, 113, 0)
    $Label3 = GUICtrlCreateLabel("Ergebnis=", 240, 40, 51, 17)
    $Label4 = GUICtrlCreateLabel("-Keins-", 296, 40, 36, 17)
    $Button5 = GUICtrlCreateButton("Beenden", 96, 424, 273, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;Starte OnEventMode

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

    Opt("GUIOnEventMode", 1)
    GUICtrlSetOnEvent($Button1, "Addieren")
    GUICtrlSetOnEvent($Button2, "Subtrahieren")
    GUICtrlSetOnEvent($Button3, "Dividieren")
    GUICtrlSetOnEvent($Button4, "Multiplizieren")
    GUICtrlSetOnEvent($Button5, "Beenden")
    GUICtrlSetOnEvent($GUI_EVENT_CLOSE, "Beenden")
    Global $zahl1 ;Global zugewiesen, damit sich die Werte beim Funktionsaufreuf nicht mehr ändern können.
    Global $zahl2
    Global $ergebnis

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

    While 1
    $Zahl1 = GUICtrlRead ($input1) ;Fragt die eingegebenen Zahlen ab, mit 1 Millisekunde Pause, um den PC nicht zu überlasten
    $Zahl2 = GUICtrlRead ($input2)
    sleep (1)
    WEnd

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

    Func Addieren()
    GUICtrlSetData($Label4, $Zahl1 + $Zahl2) ;Die oben aufgerufenen Funktionen
    EndFunc

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

    Func Subtrahieren()
    GUICtrlSetData($Label4, $Zahl1 - $Zahl2)
    EndFunc

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

    Func Dividieren()
    GUICtrlSetData($Label4, $Zahl1 / $Zahl2)
    EndFunc

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

    Func Multiplizieren()
    GUICtrlSetData($Label4, $Zahl1 * $Zahl2)
    EndFunc

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

    Func Beenden()
    Exit
    EndFunc

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

    ;Ende

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

    Einmal editiert, zuletzt von FojhtirfX (29. April 2009 um 15:52)

  • in zeile 15 felt bei dem include noch was du includieren willst

    Einfacher Rechner

    da hab ich nen rechner Programmiert, kannst dir gerne was von den Funktionen abschauen wennst willst, is aber im msg-loop mode gemacht

    Mfg

    Computers are like Airconditioning. They don´t work with open Windows.

  • Danke für den Tipp.
    Dass Problem, dass der die Includes nicht mit kopiert hatte ich gestern schonmal, merkwürdig...
    So hab ne verbesserte Version:
    V. 1.1:
    farbiger Hintergrund
    Wurzelfunktion

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Frithjof

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

    Script Function:
    Vollwertiger Taschenrechner.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    ;Includes

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

    #include <GUIConstants.au3>

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

    ;Globale Variablen: Bilder, Werte der Editfelder

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

    Global $startbild = @ScriptDir & "\mathe.jpg" , $taschenrechnerbild = @ScriptDir & "\taschenrechner_001.png"

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

    ;...............................................
    ;Startbild:

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

    SplashImageOn("Taschenrechner", $startbild)
    Sleep (1400)
    SplashOff()
    ;...............................................

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

    ;Benutzeroberfläche mit Variablenzuweisungen für die GUI-Id's (Nicht die Werte der Gui's)

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

    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Frithjof\Desktop\Tacehnrechner\Design\Taschenrechner.kxf
    $Form1 = GUICreate("Form1", 461, 506, 188, 125)
    GUISetBkColor(0xFFFF00)
    $Label1 = GUICtrlCreateLabel("Zahl 1", 40, 40, 34, 17)
    $Label2 = GUICtrlCreateLabel("Zahl 2", 40, 80, 34, 17)
    $Input1 = GUICtrlCreateInput("Eingabe", 96, 40, 113, 21)
    $Input2 = GUICtrlCreateInput("Eingabe", 96, 80, 113, 21)
    $Button1 = GUICtrlCreateButton("Addieren", 96, 160, 113, 113, 0)
    $Button2 = GUICtrlCreateButton("Subtrahieren", 96, 296, 113, 113, 0)
    $Button3 = GUICtrlCreateButton("Dividieren", 256, 160, 113, 113, 0)
    $Button4 = GUICtrlCreateButton("Multiplizieren", 256, 296, 113, 113, 0)
    $Label3 = GUICtrlCreateLabel("Ergebnis=", 240, 40, 51, 17)
    $Label4 = GUICtrlCreateLabel("-Keins-", 296, 40, 36, 17)
    $Button5 = GUICtrlCreateButton("Beenden", 96, 424, 273, 41, 0)
    $Label5 = GUICtrlCreateLabel("Wurzel", 40, 120, 37, 17)
    $Input3 = GUICtrlCreateInput("Eingabe", 96, 120, 113, 21)
    $Label6 = GUICtrlCreateLabel("Wurzel=", 240, 72, 43, 17)
    $Label7 = GUICtrlCreateLabel("-keine-", 296, 72, 36, 17)
    $Button6 = GUICtrlCreateButton("Wurzel", 208, 272, 49, 25, 0)
    GUICtrlSetOnEvent($GUI_EVENT_CLOSE , "Beenden")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;Starte OnEventMode

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

    Opt("GUIOnEventMode", 1)
    GUICtrlSetOnEvent($Button1, "Addieren")
    GUICtrlSetOnEvent($Button2, "Subtrahieren")
    GUICtrlSetOnEvent($Button3, "Dividieren")
    GUICtrlSetOnEvent($Button4, "Multiplizieren")
    GUICtrlSetOnEvent($Button5, "Beenden")
    GUICtrlSetOnEvent($Button6, "Wurzel")
    Global $zahl1 ;Global zugewiesen, damit sich die Werte beim Funktionsaufreuf nicht mehr ändern können.
    Global $zahl2
    Global $Zahl3
    Global $ergebnis

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

    While 1
    $Zahl1 = GUICtrlRead ($Input1) ;Fragt die eingegebenen Zahlen ab, mit 1 Millisekunde Pause, um den PC nicht zu überlasten
    $Zahl2 = GUICtrlRead ($Input2)
    $zahl3 = GUICtrlRead ($Input3)
    sleep (1)
    WEnd

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

    Func Addieren()
    GUICtrlSetData($Label4, $Zahl1 + $Zahl2) ;Die oben aufgerufenen Funktionen
    EndFunc

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

    Func Subtrahieren()
    GUICtrlSetData($Label4, $Zahl1 - $Zahl2)
    EndFunc

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

    Func Dividieren()
    GUICtrlSetData($Label4, $Zahl1 / $Zahl2)
    EndFunc

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

    Func Multiplizieren()
    GUICtrlSetData($Label4, $Zahl1 * $Zahl2)
    EndFunc

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

    Func Wurzel()
    GUICtrlSetData($Label7, Sqrt($Zahl3))
    EndFunc

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

    Func Beenden()
    Exit
    EndFunc

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

    ;Ende

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Ich mags, kann aber auch daran liegen, das ich ne Rot-Grün-Schwäche hab... :D Ich seh das alles ein bisschen anders... :thumbup:

  • Ich glaub auch dass man dafür ne Rot-Grün-Schwäche haben muss :D
    Is ja grausam ähnlich wie Jam00 mit seinem Grün^^
    Zum Prog: Es lässt sich nicht beenden, aber es funktioniert sehr gut :)

    Padmak

  • Also bei mir lässt es sich per Beenden Button beenden, nur das rote Kreuz oben rechts funktioniert nicht.
    Oder geht bei dir auch der Button nicht?
    Die Farbe kann sich ja Jeder anpassen :whistling:

  • Ich hab ehrlich gesagt nur das Kreuz ausprobiert
    Ersetz einfach GUICtrlSetOnEvent($GUI_EVENT_CLOSE , "Beenden") in GUISetOnEvent($GUI_EVENT_CLOSE , "Beenden") dann geht auch das Kreuz^^

    Padmak

  • Jo, danke für den Tip.
    Ich hab noch nicht ganz kapiert, was das CTRL in manchen GUI-Sachen bedeutet.
    Soll das Control bedeuten?

  • Jupp genau
    GuiCtrl... ist für Controls und Gui... für die Gui selbst
    Ist dir ja sicher schon aufgefallen dass es z.B. GuiSetState und GuiCtrlSetState gibt
    Das erste is für Guis und das zweite für Ctrls

    Padmak

  • Das auslesen der Zahlen könntest du auch in deinen Rechenfunktionen machen ;)

    Und

    Ich mags, kann aber auch daran liegen, das ich ne Rot-Grün-Schwäche hab... :D Ich seh das alles ein bisschen anders... :thumbup:


    Ich hab auch eine Schwäche in die Richtung ;) Aber alle Gelbtöne über etwa 0xBBBB00 brennen in den Augen. bei reinem Gelb (0xFFFF00) kann ich die GUI nicht mehr anschauen und nicht mehr rechen :rolleyes:

  • Was würde es Nützen, wenn ich die Zahlen erst in den Funktionen auslese? Dann muss ich die nicht Global deklarieren oder wie?
    :rolleyes:

    Zitat

    Ich hab auch eine Schwäche in die Richtung Aber alle Gelbtöne über etwa 0xBBBB00 brennen in den Augen. bei reinem Gelb (0xFFFF00) kann ich die GUI nicht mehr anschauen und nicht mehr rechen


    So gehts mir bei manchen Rottönen ^^

  • Hi,

    wie rechnet ein normaler Nutzer zB. 1,3 + 1,5, dann gibt es andere Ergebnisse (Punkt u. Komma) ?
    War10ck hat es anders gelöst !

    Progandy meinte es etwa so:

    [autoit]


    While 1
    sleep (100)
    WEnd

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

    Func Addieren()
    GUICtrlSetData($Label4, GUICtrlRead($Input1) + GUICtrlRead($Input2)) ;Die oben aufgerufenen Funktionen
    EndFunc

    [/autoit]

    Viel Erfolg ! :)