Rechner

  • Hallo,

    brauche Hilfe bei meinem Rechner, ich würde gerne das Ergebnis in den input6 anzeigen lassen, bekomme das allerdings nicht hin.
    Danke schon mal für eure Hilfe
    Mfg Michl

    Spoiler anzeigen


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    GuiCreate("Rechner",220,400,494,262)
    HotKeySet("{F1}", "Start")
    HotKeySet("{F2}", "Pause")
    GUISetOnEvent($GUI_EVENT_CLOSE,"End")
    $button1=GuiCtrlCreateButton("Start",20,40,74,27)
    $button2=GuiCtrlCreateButton("Pause",121,40,74,27)
    $input1=GuiCtrlCreateInput("2",110,105,65,15)
    $input2=GuiCtrlCreateInput("2",55,130,120,15)
    $input3=GuiCtrlCreateInput("2",55,155,120,15)
    $input4=GuiCtrlCreateInput("2",55,180,120,15)
    $input5=GuiCtrlCreateInput("2",55,205,120,15)
    $input6=GuiCtrlCreateInput("---",55,230,120,15)
    $check1=GuiCtrlCreateCheckbox("",20,80,10,15)
    $check2=GuiCtrlCreateCheckbox("",20,105,10,15)
    $label1=GuiCtrlCreateLabel("Konformitäten Neu",60,16,113,15)
    $label2=GuiCtrlCreateLabel("Bearbeitung aktivieren",55,80,113,15)
    $label3=GuiCtrlCreateLabel("Rechner",55,105,50,15)
    GuiSetState(@Sw_Show)
    While 1
    $msg=GuiGetMsg()
    If $msg=-3 Then Exit
    If $msg=$button1 Then button1()
    If $msg=$button2 Then button2()
    Wend
    Func button1()
    $Zahl1 = GUICtrlRead ($input2)
    $Zahl2 = GUICtrlRead ($input3)
    $Zahl3 = GUICtrlRead ($input4)
    $Zahl4 = GUICtrlRead ($input5)
    $Zahl5 = GUICtrlRead ($input1)
    $Ergebnis = ($Zahl1 + $Zahl2 + $Zahl3 + $Zahl4) / $Zahl5 ;dieses Ergebnis hätt ich gerne im input6 angezeigt
    EndFunc
    Func End()
    Exit
    EndFunc


  • Schau mal rein und guck obs geht kann ich jetzt nicht testen sollte aber gehen...sonst melden

    PS: Eine Frage noch...was machen die Hotkeys da?

  • Hallo,

    besten dank, funktioniert alles einwandfrei, die Hotkeys hab ich nur gemacht bzw. übernommen von einen anderen Script (nur zum Starten und zum Stopen)

    danke nochmal,
    mfg Michl

  • Hallo wiedermals,

    habe nun folgendes Problem, gibt es eine Möglichkeit das der Rechner mir das Ergebnis schon Anzeigt sobald irgendwelche Ziffern im Input steht ohne das ich den Start Button drücke? Evtl. mit einer While schleife?

    Danke schon mal
    mfg Michl

  • Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Hallo wiedermals,

    Das mit den Runden beim Ergebnis bekomme ich einfach nicht hin, könnte mir jemand evtl ein Bsp. bei meinen Script zeigen, da wäre ich echt dankbar.
    Noch ein Problem ist, das wenn ich ein Zahl mit Kommerstellen divitieren lassen will rundet er mir diese Zahl beim Ergebnis runter. (zB. bei $Zahl5 gebe ich 7,5 ein, divitiert es aber nur mit 7)

    Danke nochmal
    MFG Michl

    Spoiler anzeigen


    Func button1()
    $Zahl1 = GUICtrlRead ($input4)
    $Zahl2 = GUICtrlRead ($input5)
    $Zahl3 = GUICtrlRead ($input6)
    $Zahl4 = GUICtrlRead ($input7)
    $Zahl5 = GUICtrlRead ($input3)
    $Zahl6 = GUICtrlRead ($input8)
    $Zahl7 = GUICtrlRead ($input9)
    $Zahl8 = GUICtrlRead ($input10)
    $Zahl9 = GUICtrlRead ($input11)
    $Zahl10 = GUICtrlRead ($input13)
    $Zahl11 = GUICtrlRead ($input14)
    $Zahl12 = GUICtrlRead ($input15)
    $Zahl13 = GUICtrlRead ($input16)
    $Ergebnis = ($Zahl1 + $Zahl2 + $Zahl3 + $Zahl4 - $Zahl6 - $Zahl7 - $Zahl8 - $Zahl9) / $Zahl5
    GUICtrlSetData ( $input12, $Ergebnis )
    $Ergebnis = ( $Zahl10 / $Zahl5 )
    GUICtrlSetData ( $input17, $Ergebnis )
    $Ergebnis = ( $Zahl11 / $Zahl5 )
    GUICtrlSetData ( $input18, $Ergebnis )
    $Ergebnis = ( $Zahl12 / $Zahl5 )
    GUICtrlSetData ( $input19, $Ergebnis )
    $Ergebnis = ( $Zahl13 / $Zahl5 )
    GUICtrlSetData ( $input20, $Ergebnis )
    EndFunc

  • Guck mal auf deine Funktion. An welcher Stelle rundest du denn? ;) Die Antwort ist: An keiner. Die rundest weder auf noch ab noch kaufmännisch.

    Was deine Problembeschreibung betrifft: Keine Ahnung was du damit ausdrücken wolltest, zumal ich dein Script nicht habe und die Funktion einem da nicht sonderlich weiterhilft. Kann deinen Rechen-Durchlauf nur mit irgendwelchen Beispieldaten durchgehen:

    Zahl 1 - 13 (außer 5) = 1, Zahl 5 = 7.5

    (1+1+1+1+1+1+1+1) / 7.5 = 8 / 7.5 = 1,066

    Die anderen Rechnungen:

    1 / 7.5 = 0,133

    Wüsste nicht, warum der deine Zahlen da runden sollte (zumal du an keiner Stelle rundest), aber wenn er dies tun würde, würde er dir folgende Ergebnisse geben:

    Rechnung 1: 1,142
    Rechnung 2: 0,142

    Wenn ich nun wüsste, WAS dein Problem genau ist, WANN es auftritt, WIE es sich auswirkt, etc. pp - dann könnte ich dir helfen. So kann ich dir nur die drei Rundungsfunktionen von AutoIt zeigen.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Hallo,

    besten dank für deine rasche Antwort, hier der komplette aktuelle Script.
    1. Wie mach ich das jetzt genau, wenn ich durch 2 divitiere bekomm ich das selbe Ergebnis als wenn ich durch 2,5 divitieren würde.
    2. Beispiel beim Runden: Ergebnis 2,3333333 rauskommen dann soll er mir auf 2,3 runden. Ergebnis 2,55555555 runden auf 2,6

    Danke nochmals
    MFG Michl

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    GuiCreate("Rechner",280,400,494,262)
    GUISetOnEvent($GUI_EVENT_CLOSE,"End")
    $button1=GuiCtrlCreateButton("Start",55,10,74,27)
    $button2=GuiCtrlCreateButton("Pause",160,10,74,27)
    $input3=GuiCtrlCreateInput("2",55,105,40,15)
    $input4=GuiCtrlCreateInput("3",55,130,40,15)
    $input5=GuiCtrlCreateInput("2",55,155,40,15)
    $input6=GuiCtrlCreateInput("4",55,180,40,15)
    $input7=GuiCtrlCreateInput("8",55,205,40,15)
    $input8=GuiCtrlCreateInput("2",160,130,40,15)
    $input9=GuiCtrlCreateInput("3",160,155,40,15)
    $input10=GuiCtrlCreateInput("4",160,180,40,15)
    $input11=GuiCtrlCreateInput("2",160,205,40,15)
    $input12=GuiCtrlCreateInput("",55,230,100,15)
    $label3=GuiCtrlCreateLabel("z1",10,130,30,15)
    $label4=GuiCtrlCreateLabel("z2",10,155,30,15)
    $label5=GuiCtrlCreateLabel("z3",10,180,30,15)
    $label6=GuiCtrlCreateLabel("z4",10,205,30,15)
    $label7=GuiCtrlCreateLabel("Erg",10,230,30,15)
    $label8=GuiCtrlCreateLabel("z5",110,130,40,15)
    $label9=GuiCtrlCreateLabel("z6",110,155,40,15)
    $label10=GuiCtrlCreateLabel("z7",110,180,40,15)
    $label11=GuiCtrlCreateLabel("z8",110,205,40,15)
    $label12=GuiCtrlCreateLabel("divitieren",10,105,30,15)
    GuiSetState(@Sw_Show)
    While 1
    $msg=GuiGetMsg()
    If $msg=-3 Then Exit
    If $msg=$button1 Then button1()
    If $msg=$button2 Then button2()
    Wend

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

    Func button1()
    $Zahl1 = GUICtrlRead ($input4)
    $Zahl2 = GUICtrlRead ($input5)
    $Zahl3 = GUICtrlRead ($input6)
    $Zahl4 = GUICtrlRead ($input7)
    $Zahl5 = GUICtrlRead ($input3)
    $Zahl6 = GUICtrlRead ($input8)
    $Zahl7 = GUICtrlRead ($input9)
    $Zahl8 = GUICtrlRead ($input10)
    $Zahl9 = GUICtrlRead ($input11)
    $Ergebnis = ($Zahl1 + $Zahl2 + $Zahl3 + $Zahl4 - $Zahl6 - $Zahl7 - $Zahl8 - $Zahl9) / $Zahl5
    GUICtrlSetData ( $input12, $Ergebnis )
    EndFunc
    Func End()
    Exit
    EndFunc

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

    Einmal editiert, zuletzt von Michl (17. Dezember 2015 um 15:37)

  • Das Script ist hoffentlich nicht dein aktuelles, da das nur mit einer Fehlermeldung starten kann, da du die Funktion "Button2" nicht definiert hast. Zum anderen vermischst du OnEvent Code mit anderem. On Event ist dabei ausgeschaltet.

    1. Wie mach ich das jetzt genau, wenn ich durch 2 divitiere bekomm ich das selbe Ergebnis als wenn ich durch 2,5 divitieren würde.

    Also, wenn als Divident dort 2.5 angegeben werden würde, willst du dennoch durch 2 teilen? Erscheint mir unlogisch, daher der sinnvollste Ansatz... den Inhalt des Feldes direkt abrunden zu lassen, sobald das Feld verlassen wird.

    2. Beispiel beim Runden: Ergebnis 2,3333333 rauskommen dann soll er mir auf 2,3 runden. Ergebnis 2,55555555 runden auf 2,6

    Dazu musst du die Round-Funktion verwenden und ihr sagen, dass du eine Nachkommastelle brauchst.

    Hier mal dein Code in aufgeräumt ... :) Bitte verwende zukünftig beim Posten von Scripts das Code-Tag. Das findest du direkt links neben dem Spoiler, welches du bereits erfolgreich verwendest.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Hallo danke wiedermals,

    Beim divitieren (input3) will ich nicht runden, da möchte ich gerne mit kommastellen divitieren können was leider nicht funktioniert.

    und beim Ergebnis (input12) dort möchte ich gerne runden können einmal ohne Kommastellen und später braucht ich dann auf 2Kommastellen.

    (Button2 steht noch nicht fest was der je mal können soll :) )

    Danke
    MFG Michl

    • Offizieller Beitrag

    da möchte ich gerne mit kommastellen divitieren können was leider nicht funktioniert.

    Klar geht das. Ich vermute dass du deine Werte mit Komma eingibst. Das ist computertechnisch natürlich falsch, hier ist der Dezimaltrenner ein Punkt.
    Also entweder im Input mit Punkt eingeben oder beim Auslesen des Inputs Komma durch Punkt ersetzen.

  • Ist folgendes nicht die einfachste Lösung?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Danke euch,

    ja das mir Punkt und Komma wusst ich leider nicht, mit Punkt funktioniert es natürlich so wie ich es will, gibt es eine Möglichkeit diese umzukehren? wenn nicht dann ist es egal.

    Nur das mit den Runden bekomm ich noch immer nicht so hin wie ich es gerne hätte, wie gesagt brauch das Ergebnis ohne Komma stellen und später dann bräucht ich ein Ergebnis mit 2 Kommastellen.

    Danke wiedermals
    MFG Michl

  • Int($zahl/1)->Ohne Kommastellen
    Round($zahl,2)->2 Nachkommastellen
    $InputString=StringReplace($InputString,",",".")->Kommas im Input erlauben

    Round($zahl, 0) -> Ohne Kommastellen - selbes Ergebnis, nur weniger "Kuddelmuddel" mit unterschiedlichsten Funktionen.

    Michl: Es fehlt die Information wo genau du jetzt KEIN Komma brauchst, und wo du ZWEI Kommata benötigst. Faktisch hast du nur eine einzige Rechnung, deren Ergebnis du in ein Input schreiben lässt, welches du bisher nie wieder ausließt.

    Nehmen wir mal an, dass du den Nenner deiner Rechnung (derzeit alles Strich-Rechnungen) ohne Komma brauchst, während du das Endergebnis gerne mit zwei Kommata hättest. Dann bräuchtest du diesen Ansatz:

    Funktion(Funktion($Zahl1 + $Zahl2 + $Zahl3 + $Zahl4 - $Zahl6 - $Zahl7 - $Zahl8 - $Zahl9) / $Zahl5)

    Für Funktion musst du dann die Funktion einsetzen, die du benötigst.

    Floor - Rundet immer auf die niedrigere Ganzzahl ab.
    Round - Rundet kaufmännisch korrekt.
    Ceiling - Rundet immer auf die höhere Ganzzahl auf.

    Solltest du bei den Funktionen Floor oder Ceiling Nachkommastellen brauchen, könntest du folgende Funktion von mir verwenden:

    AutoIt
    Func __Round($vNumber, $iDecimalplaces = 0, $sFunction = "Round")
    	If $iDecimalplaces = 0 Then Return Execute($sFunction & "($vNumber)")
    	$iMult = 1
    	For $i = 1 To $iDecimalplaces
    		$iMult *= 10
    	Next
    	$vNumber = Execute($sFunction & "($vNumber * $iMult)") / $iMult
    	Return $vNumber
    EndFunc


    Falls das zu verwirrend ist, hast du hier noch drei Hilfsfunktionen:

    Schreibe bitte nicht so etwas wie "brauch das Ergebnis ohne Komma stellen und später dann bräucht ich ein Ergebnis mit 2 Kommastellen" sondern ein konkretes Problem. Hier nur mal vier Interpretationsansätze für das vorher genannte Problem. Jeder Interpretationsansatz benötigt einen anderen Lösungsweg:

    Interpretation 1: Die Strich-Rechnungen des Scripts sollen auf null Nachkommastellen gerundet werden (Floor? Ceiling? Round?). Das Endergebnis der Rechnung soll dann mit maximal zwei Kommastellen angezeigt werden.
    Interpretation 2: Ziemlich genau wie Interpretation 1. Es sollen aber *immer* 2 Nachkommastellen beim Endergebnis angezeigt werden (bsp.: 25.00)
    Interpretation 3: Das Endergebnis soll in der GUI ohne Nachkommastellen angezeigt werden, allerdings für eine spätere Rechnung auf zwei Kommastellen gerundet wieder bereit stehen.
    Interpretation 4: Das Endergebnis soll auf 0 Nachkommastellen gerundet werden, in der GUI soll es allerdings dennoch mit zwei Nachkommastellen angezeigt werden. (Ergebnis: 24.98 -> Round: 25 -> GUI: 25.00)

    ... und die Liste lässt sich noch weiter führen. Ich möchte dir auch nicht auf den Schlips treten, aber es ist schwierig dir zu helfen, wenn ich nicht einmal dein Problem kenne. Denn ich kann dir nicht in den Kopf gucken um zu wissen, was jetzt "das Ergebnis" ist, und was "ein Ergebnis". Um weiter helfen zu können wäre es sinnvoll zu wissen, was genau das Problem ist. Solange wir uns hier sprichwörtlich mit der Kristallkugel hinsetzen müssen, ist es schwierig dir bei deinem individuellen Problem zu helfen. Solange die Formulierungen nicht eindeutig sind, werde ich persönlich keinen Beitrag mehr in diesem Thread leisten, da es nicht nur dir nicht wirklich hilft, wenn ich hier im Nebel stochere, sondern zudem auch meine Zeit frisst, die ich damit hätte verbringen können jemandem zu helfen.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.