taschenrechner problem

  • Hii

    Ich hab ein problem mit meinem taschenrechner. Ihn darzustellen ist zwar kein problem aber weiter unten habe ich das problem , dass er mir einen string z.B. "1*2" ausspuckt. Meine Idee war es das ganze mit nem loop zuloesen indem ich dann schritt fuer schritt durchgehe und gucke ob es eine zahl ist, wenn ja dann schreib ich sie in eine variabel, wenn nicht dann gehe ich weiter bis zu einem operator der dann mit if clause ausgewaehlt wird. So weit so gut ich kriegs nur einfach nicht hin ^^. koenntet ihr mir helfen ? :)

  • Edit: Ich hab das mit dem Code im Thread mal erledigt:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>
    Opt("GUIOnEventMode", 1)
    $textresult=""
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 203, 139, 289, 253)
    $Button1 = GUICtrlCreateButton("=", 152, 104, 43, 25)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button2 = GUICtrlCreateButton("/", 152, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button2Click")
    $Button3 = GUICtrlCreateButton("*", 152, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button3Click")
    $Button = GUICtrlCreateButton("+", 152, 8, 41, 25)
    GUICtrlSetOnEvent(-1, "ButtonClick")
    $Button5 = GUICtrlCreateButton("9", 104, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button5Click")
    $Button6 = GUICtrlCreateButton("8", 56, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button6Click")
    $Button7 = GUICtrlCreateButton("7", 8, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button7Click")
    $Button8 = GUICtrlCreateButton("6", 104, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button8Click")
    $Button9 = GUICtrlCreateButton("5", 56, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button9Click")
    $Button10 = GUICtrlCreateButton("3", 104, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button10Click")
    $Button11 = GUICtrlCreateButton("2", 56, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button11Click")
    $Button12 = GUICtrlCreateButton("4", 8, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button12Click")
    $Button13 = GUICtrlCreateButton("1", 8, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button13Click")
    $Button4 = GUICtrlCreateButton("-", 104, 8, 41, 25)
    GUICtrlSetOnEvent(-1, "Button4Click")
    $Result = GUICtrlCreateButton($textresult, 8, 8, 89, 25)
    GUICtrlSetOnEvent(-1, "ResultClick")

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd
    ($cButton, guictrlread($cButton)&"Text")
    msgbox(0,"", Guictrlread($result))
    Func Form2close()
    Exit
    Endfunc

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

    Func Button10Click()
    $3=_GUICtrlButton_GetText($button10)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $3)

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

    Endfunc

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

    Func Button11Click()
    $2=_GUICtrlButton_GetText($button11)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $2)

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

    EndFunc

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

    Func Button12Click()
    $4=_GUICtrlButton_GetText($button12)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $4)

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

    EndFunc

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

    Func Button13Click()
    $1=_GUICtrlButton_GetText($button13)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $1)
    EndFunc

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

    Func Button2Click()
    $division=_GUICtrlButton_GetText($button2)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $division)

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

    EndFunc

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

    Func Button3Click()
    $multiplikation=_GUICtrlButton_GetText($button3)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $multiplikation)

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

    EndFunc

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

    Func Button4Click()
    $minus=_GUICtrlButton_GetText($button4)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $minus)

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

    EndFunc

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

    Func Button5Click()
    $9=_GUICtrlButton_GetText($button5)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $9)

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

    EndFunc

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

    Func Button6Click()
    $8=_GUICtrlButton_GetText($button6)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $8)
    EndFunc

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

    Func Button7Click()
    $7=_GUICtrlButton_GetText($button7)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $7)

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

    EndFunc

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

    Func Button8Click()
    $6=_GUICtrlButton_GetText($button8)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $6)

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

    EndFunc

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

    Func Button9Click()
    $5=_GUICtrlButton_GetText($button9)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $5)
    EndFunc

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

    Func ButtonClick()
    $plus=_GUICtrlButton_GetText($button)
    $textresult=_GUICtrlButton_GetText($Result)

    _GUICtrlButton_SetText($Result, $textresult & $plus)
    EndFunc
    Func ResultClick()

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

    EndFunc
    $textresult=_GUICtrlButton_GetText($Result)

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

    Msgbox(0,"",$textresult)
    Func Button1Click()
    $resultmenge=GUICtrlRead ( $Result )
    $resultarray=Stringsplit($resultmenge, "")
    Msgbox(0,"",$resultmenge)
    If $resultarray[2]= "*" Then

    Endif

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

    EndFunc
    ;splitstring
    ; if else statements + - * /

    [/autoit]


    Uhhh...du solltest wirklich mal einige Tutorials durcharbeiten und die Hilfe lesen. Dein Code...*brrrr* da schauderts mir ein bisschen, sorry. Also bei mir gibts beim Starten schon mal viele Errormeldungen und deine Art Buttonklicks abzufragen ist ziehmlich "speziell".
    Ebenfalls ist mir dies hier aufgefallen:

    [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit]


    Diese Schlaufe führt in einen Endlos-Loop und Loops sind bei einem Taschenrechner wohl eher unerwünscht.

    Hier mal ein standart-template für GUIs:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Die Includes dürften wohl klar sein...danach kommt der Bereich in dem man die eigentlichen GUI-Elemente wie die GUI selbst, Buttons, Labels etc. erstellt.
    Will man nun einem Button eine funktion zuweisen (anklickbar machen), muss man ihn darunter im Switch-Case hinzufügen...das ganze würde dann so aussehen:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    GUISetState(@SW_SHOW)
    $Button1 = GUICtrlCreateButton("Button1", 95, 330, 75, 25) ;Hier wird der Button erstellt
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ;Wird der Button angeklickt...
    MsgBox(0, "Test", "Test") ;...wird in diesem Beispiel eine Message-Box angezeigt.
    EndSwitch
    WEnd

    [/autoit]

    Übrigends gibt es für GUIs einige sehr gute Editoren. Mein Favorit ist Koda
    Damit sollte dir das ganze leichter fallen.

    Bild1: Ich beim debuggen

    Einmal editiert, zuletzt von General Kaboom (16. Oktober 2012 um 08:48)

  • Also bei mir gibts beim Starten schon mal viele Errormeldungen


    2 Zeilen auskommentiert und das Skript startet:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>
    Opt("GUIOnEventMode", 1)
    $textresult = ""
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 203, 139, 289, 253)
    $Button1 = GUICtrlCreateButton("=", 152, 104, 43, 25)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button2 = GUICtrlCreateButton("/", 152, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button2Click")
    $Button3 = GUICtrlCreateButton("*", 152, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button3Click")
    $Button = GUICtrlCreateButton("+", 152, 8, 41, 25)
    GUICtrlSetOnEvent(-1, "ButtonClick")
    $Button5 = GUICtrlCreateButton("9", 104, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button5Click")
    $Button6 = GUICtrlCreateButton("8", 56, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button6Click")
    $Button7 = GUICtrlCreateButton("7", 8, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button7Click")
    $Button8 = GUICtrlCreateButton("6", 104, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button8Click")
    $Button9 = GUICtrlCreateButton("5", 56, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button9Click")
    $Button10 = GUICtrlCreateButton("3", 104, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button10Click")
    $Button11 = GUICtrlCreateButton("2", 56, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button11Click")
    $Button12 = GUICtrlCreateButton("4", 8, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button12Click")
    $Button13 = GUICtrlCreateButton("1", 8, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button13Click")
    $Button4 = GUICtrlCreateButton("-", 104, 8, 41, 25)
    GUICtrlSetOnEvent(-1, "Button4Click")
    $Result = GUICtrlCreateButton($textresult, 8, 8, 89, 25)
    GUICtrlSetOnEvent(-1, "ResultClick")

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd
    #cs
    ($cButton, guictrlread($cButton)&"Text")
    msgbox(0,"", Guictrlread($result))
    #ce

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

    Func Form2close()
    Exit
    EndFunc ;==>Form2close

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

    Func Button10Click()
    $3 = _GUICtrlButton_GetText($Button10)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $3)

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

    EndFunc ;==>Button10Click

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

    Func Button11Click()
    $2 = _GUICtrlButton_GetText($Button11)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $2)

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

    EndFunc ;==>Button11Click

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

    Func Button12Click()
    $4 = _GUICtrlButton_GetText($Button12)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $4)

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

    EndFunc ;==>Button12Click

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

    Func Button13Click()
    $1 = _GUICtrlButton_GetText($Button13)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $1)
    EndFunc ;==>Button13Click

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

    Func Button2Click()
    $division = _GUICtrlButton_GetText($Button2)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $division)

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

    EndFunc ;==>Button2Click

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

    Func Button3Click()
    $multiplikation = _GUICtrlButton_GetText($Button3)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $multiplikation)

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

    EndFunc ;==>Button3Click

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

    Func Button4Click()
    $minus = _GUICtrlButton_GetText($Button4)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $minus)

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

    EndFunc ;==>Button4Click

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

    Func Button5Click()
    $9 = _GUICtrlButton_GetText($Button5)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $9)

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

    EndFunc ;==>Button5Click

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

    Func Button6Click()
    $8 = _GUICtrlButton_GetText($Button6)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $8)
    EndFunc ;==>Button6Click

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

    Func Button7Click()
    $7 = _GUICtrlButton_GetText($Button7)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $7)

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

    EndFunc ;==>Button7Click

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

    Func Button8Click()
    $6 = _GUICtrlButton_GetText($Button8)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $6)

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

    EndFunc ;==>Button8Click

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

    Func Button9Click()
    $5 = _GUICtrlButton_GetText($Button9)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $5)
    EndFunc ;==>Button9Click

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

    Func ButtonClick()
    $plus = _GUICtrlButton_GetText($Button)
    $textresult = _GUICtrlButton_GetText($Result)

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

    _GUICtrlButton_SetText($Result, $textresult & $plus)
    EndFunc ;==>ButtonClick
    Func ResultClick()

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

    EndFunc ;==>ResultClick
    $textresult = _GUICtrlButton_GetText($Result)

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

    MsgBox(0, "", $textresult)
    Func Button1Click()
    $resultmenge = GUICtrlRead($Result)
    $resultarray = StringSplit($resultmenge, "")
    MsgBox(0, "", $resultmenge)
    If $resultarray[2] = "*" Then

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

    EndIf

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

    EndFunc ;==>Button1Click

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

    ;splitstring
    ; if else statements + - * /

    [/autoit]

    Uhhh...du solltest wirklich mal einige Tutorials durcharbeiten und die Hilfe lesen.


    Das sollte man eher dir empfehlen wenn du mt dem GuiOnEvent-Mdus nicht zurecht kommst und dich dann och ertreistet falsche Behauptungen aufzustellen:

    Ebenfalls ist mir dies hier aufgefallen:

    [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit]

    Diese Schlaufe führt in einen Endlos-Loop und Loops sind bei einem Taschenrechner wohl eher unerwünscht.

    Sie sind bei jedem AutoItskript Pflicht da sich ansonsten die GUI sofort wieder schliesst. Dass er ein Sleep in der Schleife an der Stelle hat wo du GuGetMsg benutzt liegt am GuiOnEvent-Modus oder wie du es nennt an seiner "speziellen Art" Buttonklicks abzufragen. Nur weil du diesen Modus (den ich bevorzuge) nicht verstehst musst du nicht versuchen ihn zu dem bei Anfängern beliebteren MsgLoopModus zu bekehren.

    @Kickass: Schau dir

    [autoit]

    Execute

    [/autoit]

    in der Hilfe an, damit ersparst du dir das Parsen nach Rechenoperatoren.

    mfg autoBert


  • 2 Zeilen auskommentiert und das Skript startet:


    Daraus was er gesagt hat, bin ich nunmal davon ausgegangen, dass das Programm so zumindest starten sollte...mein Fehler...geb ich zu


    Das sollte man eher dir empfehlen wenn du mt dem GuiOnEvent-Mdus nicht zurecht kommst und dich dann och ertreistet falsche Behauptungen aufzustellen:
    ...
    Sie sind bei jedem AutoItskript Pflicht da sich ansonsten die GUI sofort wieder schliesst. Dass er ein Sleep in der Schleife an der Stelle hat wo du GuGetMsg benutzt liegt am GuiOnEvent-Modus oder wie du es nennt an seiner "speziellen Art" Buttonklicks abzufragen. Nur weil du diesen Modus (den ich bevorzuge) nicht verstehst musst du nicht versuchen ihn zu dem bei Anfängern beliebteren MsgLoopModus zu bekehren.


    1. Ich hab nicht versucht ihn damit zu "bekehren", ich benutze nur gern eine Verständliche Art etwas zu erklären...mag sein dass das auf einige herablassend wirkt, falls das so war entschuldige ich mich vielmals bei Kickass, war bestimmt nicht böse gemeint.
    2. Zu den Schlaufen hab ich nicht richtig geschaltet.
    3. Ich verstehe ihn sehrwohl, allerdings ist es mir ein Rätsel was dieser Modus an Vorteilen bringt...übersichtlicher wird der Code so ja nicht wirklich (meiner Meinung nach), aber das ist ja nicht mein Problem
    4. [OT]Trotz allem bin ich mir in Foren eigentlich einen gewissen Ton gewohnt...den vermisse ich in deiner Antwort etwas...es mag sein, das ich nicht richtig geschaltet habe und einige falschaussagen gemacht habe, aber deswegen musst du mich ja nicht gleich persönlich angreifen (auch wenns noch so gut verpackt ist).[/OT]

    @Kickass nochmals: falls du dich durch meine Antwort angegriffen fühlts sorry, ich habe diese Art von Modus halt bissher noch nie gesehen. Es war aber bestimmt nicht meine Absicht dich zu beleidigen.

    Bild1: Ich beim debuggen

    • Offizieller Beitrag

    He Leute, haut euch nicht die Rübe ein. ;)

    General Kaboom:
    Eine Bitte, die du vielleicht beherzigen kannst. Ich kenn das aus meinen Anfängen, wollte auch gerne etwas von dem mir im Forum gegebenen Support an andere weitergeben. Da schießt man schnell mal übers Ziel hinaus, da einem ein Skript unbekannt und daher falsch vorkommt. Also lieber dann mal selbst die Hilfe bemühen und schauen, was diese Art der Programmierung bedeutet.
    Wer z.B. aus der VB-Ecke zu uns stößt, kann mit Msg-Loop nichts anfangen, ist aber bestens vertraut mit OnEvent-Mode.
    Ob eine Methode besser als die andere ist, sei völlig dahingestellt. Mit beiden kann man zuverlässig arbeiten. OnEvent-Mode erleichtert es m.M. große Skripte übersichtlich zu halten. Auch die zusätzlichen Makros in diesem Modus (@GUI_CtrlId, @GUI_CtrlHandle, @GUI_WinHandle, @GUI_DragFile, @GUI_DragId, @GUI_DropId) können einiges an Vorteil mit sich bringen. Aber das ist wirklich Geschmackssache. ;)

  • Ich war halt überrascht weils ich diese Lösung noch nie gesehen habe (und ich hab auch schon ein paar VB-Skripte von Kumpels angeschaut) :whistling:
    Ich hab ja auch nicht gesagt das sie in dem Sinne falsch ist. Funktioniert hätte sie ja darum das "speziell" ^^

    Übrigends hau ich niemandem die Rübe ein...ich mag kein Gemüse :P

    Bild1: Ich beim debuggen

  • So danke für die Antworten. Entschuldigung wenn ich etwas falsch formuliert habe :)). Execute sieht gut aus dafür. Das ,was ich heute probiert habe ,
    war zu kompliziert. Ich hab ebenfalls Koda benutzt,was mit einen großen Teil des schrilltest ausgespuckt ha.

    2 Mal editiert, zuletzt von Kickass (16. Oktober 2012 um 14:55) aus folgendem Grund: Fehlende Infos

  • Hi, eine Null könnte noch fehlen. 8)

    Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $textresult = ""
    #region ### START Koda GUI section ###
    $Form2 = GUICreate("Form2", 203, 139, 289, 253)
    GUISetOnEvent(-3, "Form2close")
    $Button1 = GUICtrlCreateButton("=", 152, 104, 43, 25)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button2 = GUICtrlCreateButton(" / ", 152, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button2Click")
    $Button3 = GUICtrlCreateButton(" * ", 152, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button3Click")
    $Button = GUICtrlCreateButton(" + ", 152, 8, 41, 25)
    GUICtrlSetOnEvent(-1, "ButtonClick")
    $Button5 = GUICtrlCreateButton("9", 104, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button5Click")
    $Button6 = GUICtrlCreateButton("8", 56, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button6Click")
    $Button7 = GUICtrlCreateButton("7", 8, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button7Click")
    $Button8 = GUICtrlCreateButton("6", 104, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button8Click")
    $Button9 = GUICtrlCreateButton("5", 56, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button9Click")
    $Button10 = GUICtrlCreateButton("3", 104, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button10Click")
    $Button11 = GUICtrlCreateButton("2", 56, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button11Click")
    $Button12 = GUICtrlCreateButton("4", 8, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button12Click")
    $Button13 = GUICtrlCreateButton("1", 8, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button13Click")
    $Button4 = GUICtrlCreateButton(" - ", 104, 8, 41, 25)
    GUICtrlSetOnEvent(-1, "Button4Click")
    $Result = GUICtrlCreateButton($textresult, 8, 8, 89, 25)

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

    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While True
    Sleep(100)
    WEnd

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

    Func Form2close()
    Exit
    EndFunc ;==>Form2close

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

    Func Button10Click()
    $3 = _GUICtrlButton_GetText($Button10)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $3)
    EndFunc ;==>Button10Click

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

    Func Button11Click()
    $2 = _GUICtrlButton_GetText($Button11)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $2)
    EndFunc ;==>Button11Click

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

    Func Button12Click()
    $4 = _GUICtrlButton_GetText($Button12)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $4)
    EndFunc ;==>Button12Click

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

    Func Button13Click()
    $1 = _GUICtrlButton_GetText($Button13)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $1)
    EndFunc ;==>Button13Click

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

    Func Button2Click()
    $division = _GUICtrlButton_GetText($Button2)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $division)
    EndFunc ;==>Button2Click

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

    Func Button3Click()
    $multiplikation = _GUICtrlButton_GetText($Button3)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $multiplikation)
    EndFunc ;==>Button3Click

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

    Func Button4Click()
    $minus = _GUICtrlButton_GetText($Button4)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $minus)
    EndFunc ;==>Button4Click

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

    Func Button5Click()
    $9 = _GUICtrlButton_GetText($Button5)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $9)
    EndFunc ;==>Button5Click

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

    Func Button6Click()
    $8 = _GUICtrlButton_GetText($Button6)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $8)
    EndFunc ;==>Button6Click

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

    Func Button7Click()
    $7 = _GUICtrlButton_GetText($Button7)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $7)
    EndFunc ;==>Button7Click

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

    Func Button8Click()
    $6 = _GUICtrlButton_GetText($Button8)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $6)
    EndFunc ;==>Button8Click

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

    Func Button9Click()
    $5 = _GUICtrlButton_GetText($Button9)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $5)
    EndFunc ;==>Button9Click

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

    Func ButtonClick()
    $plus = _GUICtrlButton_GetText($Button)
    $textresult = _GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $plus)
    EndFunc ;==>ButtonClick

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

    Func Button1Click()
    $resultmenge = GUICtrlRead($Result)
    GUICtrlSetData($Result, Execute($resultmenge))
    EndFunc ;==>Button1Click
    ; Ende

    [/autoit]
    • Offizieller Beitrag

    Tipp:

    Bitte poste dein Skript im Thread ( Tab:Quellcode, [ autoit ] DEIN SKRIPT [ /autoit ] <- ohne Leerzeichen )
    Wenn man es erst herunterladen muss, ist die Wahrscheinlichkeit für Hilfe geringer.

    Was haltet ihr von dem taschenrechner jetzt ? :)


    Ich halte von einem DL-Link gar nichts. Du solltest Hinweise annehmen, die machen wir nicht aus Jux und Dallerei.

  • Entschuldige als ich das script mittels quellcode eingefuegt hab, hat er 2 autoit zeilen in eine gepackt --> nicht verstaendlich / ausprobierbar. Also hab ich ne datei angefuegt ....

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    $textresult=""
    #Region ### START Koda GUI section ###
    $Form2 = GUICreate("Calculator", 342, 168, 242, 275)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
    $Button1 = GUICtrlCreateButton("=", 152, 136, 41, 25)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button2 = GUICtrlCreateButton("/", 152, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button2Click")
    $Button3 = GUICtrlCreateButton("*", 152, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button3Click")
    $Button = GUICtrlCreateButton("+", 200, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "ButtonClick")
    $Button5 = GUICtrlCreateButton("9", 104, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button5Click")
    $Button6 = GUICtrlCreateButton("8", 56, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button6Click")
    $Button7 = GUICtrlCreateButton("7", 8, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button7Click")
    $Button8 = GUICtrlCreateButton("6", 104, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button8Click")
    $Button9 = GUICtrlCreateButton("5", 56, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button9Click")
    $Button10 = GUICtrlCreateButton("3", 104, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button10Click")
    $Button11 = GUICtrlCreateButton("2", 56, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button11Click")
    $Button12 = GUICtrlCreateButton("4", 8, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button12Click")
    $Button13 = GUICtrlCreateButton("1", 8, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button13Click")
    $Button0 = GUICtrlCreateButton("0", 56, 136, 41, 25)
    GUICtrlSetOnEvent(-1, "Button0Click")
    $Button4 = GUICtrlCreateButton("-", 152, 104, 43, 25)
    GUICtrlSetOnEvent(-1, "Button4Click")
    $Result = GUICtrlCreateButton($textresult, 56, 8, 281, 25)
    GUICtrlSetOnEvent(-1, "ResultClick")
    $Clear = GUICtrlCreateButton("Clear", 104, 136, 41, 25)
    GUICtrlSetOnEvent(-1, "ClearClick")
    $Button18 = GUICtrlCreateButton("^", 200, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button18Click")
    $Button19 = GUICtrlCreateButton("( ", 200, 136, 41, 25)
    GUICtrlSetOnEvent(-1, "Button19Click")
    $Button17 = GUICtrlCreateButton(")", 200, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button17Click")
    $Button20 = GUICtrlCreateButton(".", 8, 136, 41, 25)
    GUICtrlSetOnEvent(-1, "Button20Click")
    $Button21 = GUICtrlCreateButton("-->", 8, 8, 41, 25)
    GUICtrlSetOnEvent(-1, "Button21Click")
    $Button23 = GUICtrlCreateButton("Sin", 248, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button23Click")
    $Button24 = GUICtrlCreateButton("Cos", 248, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button24Click")
    $Button25 = GUICtrlCreateButton("Tan", 248, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button25Click")
    $Button26 = GUICtrlCreateButton("Sqrt", 248, 136, 41, 25)
    GUICtrlSetOnEvent(-1, "Button26Click")
    $Button27 = GUICtrlCreateButton("Log", 296, 40, 41, 25)
    GUICtrlSetOnEvent(-1, "Button27Click")
    $Button28 = GUICtrlCreateButton("%", 296, 72, 41, 25)
    GUICtrlSetOnEvent(-1, "Button28Click")
    $Button29 = GUICtrlCreateButton("1/x", 296, 104, 41, 25)
    GUICtrlSetOnEvent(-1, "Button29Click")
    $Button30 = GUICtrlCreateButton("Pi", 296, 136, 41, 25)
    GUICtrlSetOnEvent(-1, "Button30Click")

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

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

    Func Form2close()
    Exit
    Endfunc

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

    Func Button27Click()
    $textresultlog=_GUICtrlButton_GetText($Result)
    $Result7=Execute($textresultlog)
    $logresult=Log($Result7)
    _GUICtrlButton_SetText($Result, $logresult )
    EndFunc

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

    Func Button28Click()
    $textresultpercent=_GUICtrlButton_GetText($Result)
    $Result8=Execute($textresultpercent)
    $percentresult=$result8/100
    _GUICtrlButton_SetText($Result, $percentresult )
    EndFunc

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

    Func Button29Click()
    $textresult1x=_GUICtrlButton_GetText($Result)
    $Result9=Execute($textresult1x)
    $1xresult=1/$Result9
    _GUICtrlButton_SetText($Result, $1xresult )
    EndFunc

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

    Func Button30Click()
    $textresultlog=_GUICtrlButton_GetText($Result)
    $Result7=Execute($textresultlog)
    $logresult=Log($Result7)
    _GUICtrlButton_SetText($Result, $logresult )
    EndFunc

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

    Func Button23Click()
    $textresultSin=_GUICtrlButton_GetText($Result)
    $Result3=Execute($textresultSin)
    $sinresult=Sin($Result3)
    _GUICtrlButton_SetText($Result, $sinresult )
    EndFunc

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

    Func Button24Click()
    $textresultcos=_GUICtrlButton_GetText($Result)
    $Result4=Execute($textresultcos)
    $cosresult=Cos($Result4)
    _GUICtrlButton_SetText($Result, $cosresult )
    EndFunc

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

    Func Button25Click()
    $textresulttan=_GUICtrlButton_GetText($Result)
    $Result5=Execute($textresulttan)
    $tanresult=Tan($Result5)
    _GUICtrlButton_SetText($Result, $tanresult )
    EndFunc

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

    Func Button26Click()
    $textresultsqrt=_GUICtrlButton_GetText($Result)
    $Result6=Execute($textresultsqrt)
    $sqrtresult=Tan($Result6)
    _GUICtrlButton_SetText($Result, $sqrtresult )
    EndFunc

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

    Func Button20Click()
    $point=_GUICtrlButton_GetText($Button20)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $point )
    EndFunc

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

    Func Button17Click()
    $bracketleftoppened=_GUICtrlButton_GetText($Button17)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $bracketleftoppened )
    EndFunc

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

    Func Button19Click()
    $bracketrightoppened=_GUICtrlButton_GetText($Button19)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $bracketrightoppened)
    EndFunc

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

    Func Button18Click()
    $hoch=_GUICtrlButton_GetText($Button18)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $hoch)
    EndFunc

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

    Func ClearClick ()
    _GUICtrlButton_SetText($Result, "")
    Endfunc

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

    Func Button0Click()
    $0=_GUICtrlButton_GetText($button0)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $0)
    Endfunc

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

    Func Button10Click()
    $3=_GUICtrlButton_GetText($button10)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $3)
    Endfunc

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

    Func Button11Click()
    $2=_GUICtrlButton_GetText($button11)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $2)
    EndFunc

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

    Func Button12Click()
    $4=_GUICtrlButton_GetText($button12)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $4)
    EndFunc

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

    Func Button13Click()
    $1=_GUICtrlButton_GetText($button13)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $1)
    EndFunc

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

    Func Button2Click()
    $division=_GUICtrlButton_GetText($button2)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $division)
    EndFunc

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

    Func Button3Click()
    $multiplikation=_GUICtrlButton_GetText($button3)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $multiplikation)
    EndFunc

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

    Func Button4Click()
    $minus=_GUICtrlButton_GetText($button4)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $minus)
    EndFunc

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

    Func Button5Click()
    $9=_GUICtrlButton_GetText($button5)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $9)
    EndFunc

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

    Func Button6Click()
    $8=_GUICtrlButton_GetText($button6)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $8)
    EndFunc

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

    Func Button7Click()
    $7=_GUICtrlButton_GetText($button7)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $7)
    EndFunc

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

    Func Button8Click()
    $6=_GUICtrlButton_GetText($button8)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $6)
    EndFunc

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

    Func Button9Click()
    $5=_GUICtrlButton_GetText($button9)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $5)
    EndFunc

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

    Func ButtonClick()
    $plus=_GUICtrlButton_GetText($button)
    $textresult=_GUICtrlButton_GetText($Result)
    _GUICtrlButton_SetText($Result, $textresult & $plus)
    EndFunc

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

    Func Button21Click()
    $textresult=_GUICtrlButton_GetText($Result)
    $textresult=Stringtrimright($textresult, 1)
    _GUICtrlButton_SetText($Result, $textresult )
    endfunc

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

    Func ResultClick()
    $textresult=_GUICtrlButton_GetText($Result)
    EndFunc

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

    Func Button1Click()
    $resultmenge=GUICtrlRead ( $Result )
    $lastlastresult= Execute($resultmenge)
    _GUICtrlButton_SetText($Result, $lastlastresult )
    EndFunc

    [/autoit]

    mal gucken ob ers jetzt nimmt ;)

    Edit BugFix: Hab das mal formatiert und in Spoiler gesetzt

    Einmal editiert, zuletzt von BugFix (18. Oktober 2012 um 10:27)

    • Offizieller Beitrag

    Wer Lesen kann ist klar im Vorteil: Tab:Quellcode
    Wenn du das in den Editor packst wird das nichts. Du brauchst immer nur den "Quellcode"-TAB benutzen. Der Tab "Editor" ist eigentlich sinnfrei.
    Und wenn der Code länger als ein paar Zeilen ist: in Spoiler packen [ spoiler ] [ autoit ] Code [ /autoit ] [ /spoiler ]

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

    #region - GUI Create
    GUICreate("Division durch 0 !")
    $ipt = GUICtrlCreateInput("345/0", 10, 10)
    $btn = GUICtrlCreateButton("rechnen", 10, 40, 75, 22)
    #endregion - GUI Create

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

    GUISetState(@SW_SHOW)

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

    #region - Switchloop
    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    ExitLoop
    Case $btn
    ;i hier wird das Eingabefeld ausgelesen und gerechnet
    $result = Execute(GUICtrlRead($ipt))
    ;i ist das Resultat 1.#INF oder "-1.#IND
    ;i dann den Variableninhalt mit Error überschreiben
    If $result == "1.#INF" Or $result == "-1.#IND" Then $result = "Error"
    ;i den Variableninhalt in das Inputfeld einsetzen
    GUICtrlSetData($ipt, $result)
    EndSwitch
    WEnd
    #endregion - Switchloop
    ; Ende

    [/autoit]
  • Und genau so schaffen die 'bösen' Hacker es dann Spaß zu haben RR04! :D
    Gebt in seinem Beispiel doch bitte mal eine 'Rechnung' wie zum Beispiel

    [autoit]

    MsgBox(64,'...','Also immer erst filtern und dann ausführen... :P')

    [/autoit]

    ein und seht euch an was passiert...
    Deshalb filtert man solche Usereingaben immer erst:

    [autoit]

    $Eingabe = InputBox('Eingabe','Rechnung:')
    $Ergebnis = Execute(StringRegExpReplace($Eingabe,'[^\*\/\-\+\.\d]',''))
    If $Ergebnis == "1.#INF" Or $Ergebnis == "-1.#IND" Then $Ergebnis = "Error"
    MsgBox(0,'',$Ergebnis)
    Exit

    [/autoit]

    Edit: Punkt im RegExp-Pattern hinzugefügt. Danke James ;)

    LG
    Christoph :)

    Einmal editiert, zuletzt von BinDannMalWeg (20. Oktober 2012 um 20:05)


  • 1) Du hast vergessen den Punkt "." mit in den Filter einzubauen, außerdem gehen dann auch Befehle wie Sqrt() nicht mehr... :P
    2) Ist so etwas wirklich nötig? Du hast schon recht, der "Hacker" könnte jetzt mit dem Taschenrechner AutoIt-Befehle ausführen, aber da dies nur lokal passiert, sollte dadurch doch eigentlich kein Sicherheitsrisiko entstehen, oder?

  • Ist so etwas wirklich nötig?

    Ja, ich bin der Meinung, dass solche Fehler schon von Grund auf vermieden/umgangen werden sollten da der "angehende Programmierer" somit gleich lernt es "richtig" beziehungsweise sicher zu machen. Außerdem lassen sich so auch Fehler vermeiden, die sehr wahrscheinlich entstehen, wenn man Execute() Buchstaben und Zahlen oä. verrechnen lässt...

    LG
    Christoph :)

  • Hi !
    1. Wie schreibt man etwas in einen Button, was nicht von den Button des TRechners kommt ?
    Siehe in Post #12 Zeile 41, Kickass verwendet einen Button als Display (Inputfeld) !!

    [autoit]


    $Result = GUICtrlCreateButton($textresult, 56, 8, 281, 25)

    [/autoit]


    2. besser so:

    [autoit]


    ;i besser so:
    $Eingabe = InputBox('Eingabe','Rechnung:')
    ;i bei error und cancel beenden
    If @error Then Exit
    ;i den Punkt beachten (2.5*2 =5 und nicht 50 !!)
    $Ergebnis = Execute(StringRegExpReplace($Eingabe,'[^\.\*\/\-\+\d]',''))
    If $Ergebnis == "1.#INF" Or $Ergebnis == "-1.#IND" Then $Ergebnis = "Error"
    MsgBox(0,'',$Ergebnis)
    Exit
    ; Ende

    [/autoit]
  • In meinem Code-Schnippsel ging es doch nur darum, dass "Kickass" versteht wie ich das mit dem Filter meine... ;) Und das mit dem fehlenden Punkt hab ich dank James's Hinweis doch schon längst verbessert?

    LG
    Christoph :)