• Hab mal nen einfachen Rechner Programmiert, vllt habt ihr ne idee wie man das ganze verkürzen kann.

    Für Ideeen für weitere Funktionen wäre ich dankbar, falls ihr nen Bug findet bitte sagen.

    Hier das Skript:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <Math.au3>

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

    #region GUI
    guicreate("Claculator", 320, 220)
    GUIctrlcreateinput("", 10, 10, 300, 30) ;ID=3
    GUIctrlcreatebutton("1", 10, 50, 30, 30) ;ID=4
    guictrlcreatebutton("4", 10, 90, 30, 30) ;ID=5
    guictrlcreatebutton("7", 10, 130, 30, 30) ;ID=6
    guictrlcreatebutton("0", 10, 170, 30, 30) ;ID=7
    guictrlcreatebutton("2", 50, 50, 30, 30) ;ID=8
    guictrlcreatebutton("5", 50, 90, 30, 30) ;ID=9
    guictrlcreatebutton("8", 50, 130, 30, 30) ;ID=10
    guictrlcreatebutton(".", 50, 170, 30, 30) ;ID=11
    guictrlcreatebutton("3", 90, 50, 30, 30) ;ID=12
    guictrlcreatebutton("6", 90, 90, 30, 30) ;ID=13
    guictrlcreatebutton("9", 90, 130, 30, 30) ;ID=14
    guictrlcreatebutton("(-)", 90, 170, 30, 30) ;ID=15
    guictrlcreatebutton("+", 130, 50, 30, 30) ;ID=16
    guictrlcreatebutton("-", 130, 90, 30, 30) ;ID=17
    guictrlcreatebutton("*", 130, 130, 30, 30) ;ID=18
    guictrlcreatebutton("/", 130, 170, 30, 30) ;ID=19
    guictrlcreatebutton("x²", 170, 50, 30, 30) ;ID=20
    guictrlcreatebutton("x^-1", 170, 90, 30, 30) ;ID=21
    guictrlcreatebutton("^", 170, 130, 30, 30) ;ID=22
    guictrlcreatebutton("sin", 210, 50, 30, 30) ;ID=23
    guictrlcreatebutton("cos", 210, 90, 30, 30) ;ID=24
    guictrlcreatebutton("tan", 210, 130, 30, 30) ;ID=25
    guictrlcreatebutton("C", 250, 50, 30, 30) ;ID=26
    guictrlcreatebutton("CE", 250, 90, 30, 30) ;ID=27
    guictrlcreatebutton("PI", 250, 130, 30, 30) ;ID=28
    guictrlcreatebutton("ENTER", 170, 170, 110, 30) ;ID=29
    guiseticon("icon.ico")

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

    guisetstate(@SW_SHOW)
    #endregion GUI

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

    #region Button Functions
    dim $rechnung
    $pi= 3.14159265358979323846264338328

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

    while 1
    $msg= guigetmsg()
    if $msg= $GUI_EVENT_CLOSE Then Exit

    Select
    case $msg=4
    $edit=guictrlread(3)
    $string= $edit &1
    guictrlsetdata( 3, $string)
    case $msg=5
    $edit=guictrlread(3)
    $string= $edit &4
    guictrlsetdata(3, $string)
    case $msg=6
    $edit=guictrlread(3)
    $string= $edit &7
    guictrlsetdata(3, $string)
    case $msg= 7
    $edit = guictrlread(3)
    $string= $edit &0
    guictrlsetdata(3, $string)
    case $msg= 8
    $edit=guictrlread(3)
    $string= $edit &2
    guictrlsetdata(3, $string)
    case $msg=9
    $edit=guictrlread(3)
    $string= $edit &5
    guictrlsetdata(3, $string)
    case $msg= 10
    $edit=guictrlread(3)
    $string= $edit &8
    guictrlsetdata(3, $string)
    case $msg = 11
    $edit= guictrlread(3)
    $string= $edit &.
    guictrlsetdata(3, $string)
    case $msg= 12
    $edit=guictrlread(3)
    $string= $edit &3
    guictrlsetdata(3, $string)
    case $msg= 13
    $edit= guictrlread(3)
    $string= $edit &6
    guictrlsetdata(3, $string)
    case $msg= 14
    $edit= guictrlread(3)
    $string= $edit &9
    guictrlsetdata(3, $string)
    case $msg= 15
    $edit= guictrlread(3)
    $string= -& $edit
    guictrlsetdata(3, $string)
    case $msg= 16
    $edit=guictrlread(3)
    $rechnung=$rechnung & $edit
    $rechnung=$rechnung &"+"
    guictrlsetdata(3,"")
    case $msg= 17
    $edit=guictrlread(3)
    $rechnung= $rechnung & $edit
    $rechnung= $rechnung & "-"
    guictrlsetdata(3,"")
    case $msg= 18
    $edit=guictrlread(3)
    $rechnung= $rechnung & $edit
    $rechnung= $rechnung & "*"
    guictrlsetdata(3, "")
    case $msg= 19
    $edit=guictrlread(3)
    $rechnung= $rechnung & $edit
    $rechnung= $rechnung & "/"
    guictrlsetdata(3, "")
    case $msg= 20
    $edit=guictrlread(3)
    $rechnung= $rechnung & $edit
    $rechnung= $rechnung & "^2"
    guictrlsetdata(3, "")
    case $msg= 21
    $edit=guictrlread(3)
    $rechnung= $rechnung & $edit
    $rechnung= $rechnung & "^-1"
    guictrlsetdata(3, "")
    case $msg=22
    $edit=guictrlread(3)
    $rechnung= $rechnung & $edit
    $rechnung= $rechnung & "^"
    guictrlsetdata(3, "")
    case $msg=23
    $edit=guictrlread(3)
    $edit2= _radian( $edit )
    $string= sin( $edit2 )
    guictrlsetdata(3, $string)
    case $msg= 24
    $edit=guictrlread(3)
    $edit2= _radian( $edit)
    $string= cos( $edit2 )
    guictrlsetdata(3, $string)
    case $msg= 25
    $edit=guictrlread(3)
    $edit2= _radian( $edit )
    $string= tan($edit2)
    guictrlsetdata(3, $string)
    case $msg= 26
    guictrlsetdata(3, "")

    case $msg= 27
    $edit=guictrlread(3)
    guictrlsetdata(3,"")
    $rechnung=0
    case $msg=28
    $rechnung= $rechnung & $pi
    guictrlsetdata(3, $pi)
    case $msg=29
    $edit=guictrlread(3)
    $rechnung= $rechnung & $edit
    $ergebnis= execute($rechnung)

    guictrlsetdata(3, $ergebnis)
    endselect
    wend
    #endregion Button Functions

    [/autoit]

    Edit: Ich hab schon nen Bug gefunden, in meiner Rechtschreibung xD
    Edit2: So hab jetz noch den Icon Hochgeladen, das skript werde ich so bald ich Zeit habe verbessern

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

    2 Mal editiert, zuletzt von war10ck (26. Februar 2009 um 19:52)

  • Ich habe zwar schon viel chaotisches gesehen, aber so eine AutoIt-Programmierung bisher kaum.

    "GUICtrlCreate..." gibt die ID des erzeugten Controls zurück. Du kannst die ID also einfach in eine Variable lesen ($var = GUICTRLCreate...) und dann damit arbeiten. Das erhöht die Übersichtlichkeit bei den Abfragen "Case $msg = $var" und bei "GUICtrlRead($var)", sowie "GUICtrlSetData($var,...). Dann kann man den AutoIt-Code besser lesen und Du kannst Dir die Kommentare hinter den "GUICtrlCreate..." sparen.

    Es heißt "Calculator" und nicht "Claculator". Manchmal ist es halt besser man schreibt "Rechner" ;)

    Wenn Du "Select...Case...EndSelct" nutzt, warum dann "if $msg= $GUI_EVENT_CLOSE Then Exit" ?

    "$rechnung=$rechnung & $edit" lässt sich mit "$rechnung &= $edit" kürzen und beschleunigen.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Boa ich wollts grad auf ca 50 zeilen kürzen, aber ich blick grad gar nicht mehr durch
    Ist ja furchtbar *schlotter*
    Ich will dich nicht entmutigen, aber das ist wirklich ekelhaft zu lesen und noch schlimmer zu verstehen/bearbeiten

    Padmak

  • Das mindeste ist ja wohl nicht mit IDs sondern mit Variablen zu arbeiten. :S
    Man muss ja nicht streng strukturiert proggen, aber wenn man eine Supportanfrage an ein Forum stellt, sollte man vielleicht daran denken, dass hier keiner dafür bezahlt wird, support zu leisten.
    Bitte bedenke das. :!:

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hi,
    ich hab nix zu tun gehabt und hab mal einen Anfang gebastelt :).

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>

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

    ; hier Anzahl von Reihen anpassen
    Global $reihen = 10

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

    Global $button[(7 * $reihen) + 2], $counter = 1, $description[(7 * $reihen) + 1][2] = [["", ""],["1", ""],["2", ""],["3", ""],["+", ""],["x²", "^2"],["sin", ""],["C", "sondertaste"],["4", ""],["5", ""],["6", ""],["-", ""],["x^-1", "^-1"],["cos", ""],["CE", "sondertaste"],["7", ""],["8", ""],["9", ""],["*", ""],["^", ""],["tan", ""],["PI", "3,14"],["0", ""],[".", ""],["(-)", "-"],["/", ""],["(", ""],[")", ""]]

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

    $MainGUI = GUICreate("Calculator", 290, 50 + ($reihen + 1) * 40)
    $input = GUICtrlCreateInput("", 10, 10, 270, 30, $ES_RIGHT)
    For $j = 50 To $reihen * 40 + 40 Step 40
    For $i = 10 To 250 Step 40
    $button[$counter] = GUICtrlCreateButton($description[$counter][0], $i, $j, 30, 30)
    $counter += 1
    Next
    Next
    $button[$counter] = GUICtrlCreateButton("ENTER", 10, 50 + $reihen * 40, 270, 30)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    For $i = 1 To $counter - 1
    If $msg = $button[$i] Then
    If $description[$i][1] = 'sondertaste' Then
    Switch $description[$i][0]
    Case 'C'
    GUICtrlSetData($input, "")
    Case 'CE'
    GUICtrlSetData($input, "Viel Spass :) beim basteln")
    EndSwitch
    ElseIf $description[$i][1] <> '' Then
    GUICtrlSetData($input, GUICtrlRead($input) & $description[$i][1])
    Else
    GUICtrlSetData($input, GUICtrlRead($input) & $description[$i][0])
    EndIf
    EndIf
    Next

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

    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button[$counter]
    $var = Execute(GUICtrlRead($input))
    If Not @error Then
    GUICtrlSetData($input, $var)
    Else
    GUICtrlSetData($input, "Error!")
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Man kann die Anzahl der Reihen ganz einfach anpassen und auch ganz einfach neue Befehle hinzufügen. In der 1. Spalte des Arrays stehen die Captions der Buttons und in der 2. die Rechenoperatoren. Wenn in der 2. Spalte "" steht, dann werden die Captions als Operatoren (1. Spalte) genommen. Wenn man in der 2. Spalte 'sondertaste' schreibt, kann man ihr einen selbst definierten Befehl zuweisen.

    Wie gesagt das ist nur ein Anfang, es gibt auch schon tausende Taschenrechner, deshalb ist es eigentlich unnötig noch einen zu schreiben, aber ich hatte grad lust was zu machen.


    @L3viathan2142 du nervst!

    1. Wenn man nicht weiß wies geht, kann man auch nicht anders arbeiten. Du bist auch nicht als Profi vom Himmel gefallen.
    2. Es ist überhaupt keine Supportanfrage.
    3. Haben jetzt schon 2 Leute vor dir genau das selbe gesagt.
    4. Bestehen 90% deiner Posts aus so einem Schrott, mit dem keiner irgendetwas anfangen könnte.


    anno2008

  • Hallo erstmal!
    Der Rechner ist toll geworden, aber Zeile 131 gehört so:

    [autoit]

    $rechnung= $rechnung & "^"

    [/autoit]


    Du hast die "" beim ^ vergessen.

    wo ist das Icon für Zeile 34?

    [autoit]

    guiseticon("icon.ico")

    [/autoit]

    Laufen tut es zwar trotzdem, aber ein Icon sieht schöner aus. :D

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • erst mal vielen dank dass ihr euch die mühe gemacht habt
    wegen den Id´s: Wenn ic variablen neme passiert es bei mir oft dass die variablen irre lang werden, wahrscheinlich zu wenig einfallsreichtum xD. Deswegen neme ich lieber einfach die ID´s, da wird das nict so lang, und ich von meiner seite finds übersichtlicher, wenn ihr wollt kann ichs aber noch ändern.
    @Micha: Wegem dem Claculator: Beim tippen hab ich öfter mal das Problem dass die eine Hand schneller ist als die andere und daher manche Buchstaben vertacuhst sind xD, warum ich da if genutzt habe weis ic auch nicht so wirklich, werde ich gleich mal ändern, das mit $recnung werd ich auch gleich ausbessern.

    @Padmak: Sry wegen der lesbarkeit, ich kenn mich jedenfalls aus^^, werds aber verbessern

    @L3viatan: Das ist keine Supportanfrage, und ich weis dass ir nicht dafür bezahlt werdet. Hätte mir ja auch gereicht wenn du einfac nur sagst dass mann es fast nicht verstehen kann.

    @anno: Danke für die arbeit, muss mir das ganze aber noch angucken, verstehe noch nicht so ganz was du da mit den buttons und reihen gemacht hast

    Tobi: danke für das finden des fehlers, den icon hab ich vergessen hochzuladen, werd ich aber gleic machen

    Mfg

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

  • Deswegen neme ich lieber einfach die ID´s, da wird das nict so lang, und ich von meiner seite finds übersichtlicher

    Dann darfst Du nur nie Controls deines GUI's löschen oder einfügen, nur neue anhängen.
    Sonst kannst Du die ganzen ID's nachbessern. Denn die werden bei generieren nummeriert. Meiner Erfahrung nach wird beim 'GUICtrlCreate' immer die nächste freie ID genutzt.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • So hier mal die verbesserung die ihr wolltet, jetzt löscht er auch wenn man ein Rechenzeichen eigibt nicht immer alles weg. Hoffe das is so wie ihr das gemeint habt


    Spoiler anzeigen
    [autoit]

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

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

    AutoIt Version: 3.3.0.0
    Author: war10ck (Manfred Preyer)

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

    Script Function: Calculator
    Template AutoIt script.

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

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

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

    #include <GUIConstants.au3>
    #include <Math.au3>

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

    Hotkeyset("{ENTER}", "_ENTER")
    #region GUI
    guicreate("Calculator", 320, 220)
    $input= GUIctrlcreateinput("", 10, 10, 300, 30)
    $1 =GUIctrlcreatebutton("1", 10, 50, 30, 30)
    $4 =guictrlcreatebutton("4", 10, 90, 30, 30)
    $7 =guictrlcreatebutton("7", 10, 130, 30, 30)
    $0 =guictrlcreatebutton("0", 10, 170, 30, 30)
    $2 =guictrlcreatebutton("2", 50, 50, 30, 30)
    $5 =guictrlcreatebutton("5", 50, 90, 30, 30)
    $8 =guictrlcreatebutton("8", 50, 130, 30, 30)
    $KOMMA =guictrlcreatebutton(".", 50, 170, 30, 30)
    $3 =guictrlcreatebutton("3", 90, 50, 30, 30)
    $6 =guictrlcreatebutton("6", 90, 90, 30, 30)
    $9 =guictrlcreatebutton("9", 90, 130, 30, 30)
    $NEGATIV =guictrlcreatebutton("(-)", 90, 170, 30, 30)
    $PLUS = guictrlcreatebutton("+", 130, 50, 30, 30)
    $MINUS =guictrlcreatebutton("-", 130, 90, 30, 30)
    $MAL =guictrlcreatebutton("*", 130, 130, 30, 30)
    $DIVIDIERT =guictrlcreatebutton("/", 130, 170, 30, 30)
    $QUADRAT =guictrlcreatebutton("x²", 170, 50, 30, 30)
    $REZIPROK =guictrlcreatebutton("x^-1", 170, 90, 30, 30)
    $HOCH =guictrlcreatebutton("^", 170, 130, 30, 30)
    $SIN =guictrlcreatebutton("sin", 210, 50, 30, 30)
    $COS =guictrlcreatebutton("cos", 210, 90, 30, 30)
    $TAN =guictrlcreatebutton("tan", 210, 130, 30, 30)
    $KLAMMERAUF =guictrlcreatebutton("(", 250, 50, 30, 30)
    $KLAMMERZU =guictrlcreatebutton(")", 290, 50, 30,30)
    $CLEAR =guictrlcreatebutton("CLEAR", 250, 90, 70, 30)
    $PIBUTTON =guictrlcreatebutton("PI", 250, 130, 30, 30)
    $ENTER =guictrlcreatebutton("ENTER", 170, 170, 110, 30)
    guiseticon("icon.ico")

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

    guisetstate(@SW_SHOW)
    #endregion GUI

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

    #region Button Functions
    dim $rechnung
    $pi= 3.14159265358979323846264338328

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

    while 1
    $msg= guigetmsg()
    if $msg= $GUI_EVENT_CLOSE Then Exit

    Select
    case $msg=$1
    $edit=guictrlread($input)
    $string= $edit &1
    guictrlsetdata( $input, $string)
    case $msg=$4
    $edit=guictrlread($input)
    $string= $edit &4
    guictrlsetdata($input, $string)
    case $msg=$7
    $edit=guictrlread($input)
    $string= $edit &7
    guictrlsetdata($input, $string)
    case $msg= $0
    $edit = guictrlread($input)
    $string= $edit &0
    guictrlsetdata($input, $string)
    case $msg=$2
    $edit=guictrlread($input)
    $string= $edit &2
    guictrlsetdata($input, $string)
    case $msg=$5
    $edit=guictrlread($input)
    $string= $edit &5
    guictrlsetdata($input, $string)
    case $msg= $8
    $edit=guictrlread($input)
    $string= $edit &8
    guictrlsetdata($input, $string)
    case $msg = $KOMMA
    $edit= guictrlread($input)
    $string= $edit &"."
    guictrlsetdata($input, $string)
    case $msg= $3
    $edit=guictrlread($input)
    $string= $edit &3
    guictrlsetdata($input, $string)
    case $msg= $6
    $edit= guictrlread($input)
    $string= $edit &6
    guictrlsetdata($input, $string)
    case $msg= $9
    $edit= guictrlread($input)
    $string= $edit &9
    guictrlsetdata($input, $string)
    case $msg= $NEGATIV
    $edit= guictrlread($input)
    $string= "-"& $edit
    guictrlsetdata($input, $string)
    case $msg= $PLUS
    $edit=guictrlread($input)
    $string=$edit & "+"
    guictrlsetdata($input,$string)
    case $msg= $MINUS
    $edit=guictrlread($input)
    $string=$edit & "-"
    guictrlsetdata($input,$string)
    case $msg= $MAL
    $edit=guictrlread($input)
    $string= $edit & "*"
    guictrlsetdata($input, $string)
    case $msg= $DIVIDIERT
    $edit=guictrlread($input)
    $string= $edit & "/"
    guictrlsetdata($Input, $string)
    case $msg= $QUADRAT
    $edit=guictrlread($input)
    $string= $edit & "^2"
    guictrlsetdata($input, $string)
    case $msg= $REZIPROK
    $edit=guictrlread($input)
    $string= $edit & "^-1"
    guictrlsetdata($input , $string)
    case $msg=$HOCH
    $edit=guictrlread($input)
    $string= $edit & "^"
    guictrlsetdata($input, $string)
    case $msg=$SIN
    $edit=guictrlread($input)
    $edit2= _radian( $edit )
    $string= sin( $edit2 )
    guictrlsetdata($input, $string)
    case $msg= $COS
    $edit=guictrlread($input)
    $edit2= _radian( $edit)
    $string= cos( $edit2 )
    guictrlsetdata($input, $string)
    case $msg= $TAN
    $edit=guictrlread($input)
    $edit2= _radian( $edit )
    $string= tan($edit2)
    guictrlsetdata($input, $string)
    case $msg= $KLAMMERAUF
    $edit=guictrlread($input)
    $string= $edit & "("
    guictrlsetdata($input, $string)
    case $msg= $KLAMMERZU
    $edit= guictrlread($input)
    $string= $edit & ")"
    guictrlsetdata($input, $string)
    case $msg= $CLEAR
    Guictrlsetdata($input, "")

    case $msg=$PIBUTTON
    $edit= guictrlread($input)
    $string= $edit & $pi
    guictrlsetdata($input, $string)
    case $msg=$ENTER
    $edit=guictrlread($input)
    $ergebnis= execute($edit)

    guictrlsetdata($input, $ergebnis)
    endselect
    wend
    #endregion Button Functions

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

    func _ENTER()
    $edit=guictrlread(3)
    $rechnung &=$edit
    $ergebnis= execute($rechnung)
    guictrlsetdata(3, $ergebnis)
    endfunc

    [/autoit]

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