Kleiner Prozentrechner

  • Hallo Leute,
    habe in letzter Zeit viel mit Prozenten rumgerechnet - dabei ist dieser kleine Rechner entstanden:
    [Blockierte Grafik: http://s7.directupload.net/images/140511/temp/xz8efvgn.png]

    Er ist selbst erklärend dank "Tip's" :)

    Hier das Skript:

    Spoiler anzeigen
    [autoit]

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

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

    $pCfg = @ScriptDir & "\Config.cfg"
    $nX = FileReadLine($pCfg, 1)
    $nY = FileReadLine($pCfg, 2)
    $nRadio = FileReadLine($pCfg, 3)

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

    $hGUI = GUICreate("Prozentrechner", 220, 70)
    GUISetFont(-1, 10, 400, 0, "Lucida Console")
    GUISetBkColor(0xE6E6E6)

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

    $hPerc = GUICtrlCreateInput("0", 18.33, 17.5, 50, 20)
    GUICtrlSetTip(-1, "Auszurechnender Prozentwert (in %)")
    $hUpDown = GUICtrlCreateUpdown(-1)

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

    $h100 = GUICtrlCreateInput("0", 81.66, 17.5, 120, 20, 0x2000)
    GUICtrlSetTip(-1, "100% entsprechen dem eingegebenem Wert")

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

    $hCalc = GUICtrlCreateButton("=", 5, 50, 15, 15)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetTip(-1, "Berechnung starten")

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

    $hVal = GUICtrlCreateLabel("0", 25, 50, 110, 15, 0x01)
    GUICtrlSetFont(-1, -1, -1, 4)
    GUICtrlSetTip(-1, "Erechneter numerischer Wert")

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

    $hCopy = GUICtrlCreateCheckbox("Autokopie", 145, 47)
    GUICtrlSetTip(-1, "Aktiviert das automatische Hinzufügen des Ergebnisses in die Zwischenablage")
    If $nRadio = $GUI_CHECKED Then GUICtrlSetState(-1, $GUI_CHECKED)
    If $nradio = $GUI_UNCHECKED Then GUICtrlSetState(-1, $GUI_UNCHECKED)

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

    GUICtrlCreateGroup("", 5, 0, 210, 45)

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

    If Not $nX = "" And Not $nY = "" Then WinMove("Prozentrechner", "", $nX, $nY)

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

    GUISetState(@SW_SHOW, $hGUI)

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg

    Case $GUI_EVENT_CLOSE
    $aPos = WinGetPos("Prozentrechner")
    $bCopy = GUICtrlRead($hCopy)

    FileDelete($pCfg)
    FileWriteLine($pCfg, $aPos[0])
    FileWriteLine($pCfg, $aPos[1])
    FileWriteLine($pCfg, $bCopy)
    Exit

    Case $hCalc
    $bCopy = GUICtrlRead($hCopy)
    $nPerc = GUICtrlRead($hPerc)
    $n100 = GUICtrlread($h100)

    $nVal = ($n100 / 100) * $nPerc
    GUICtrlSetData($hVal, $nVal)

    If $bCopy = $GUI_CHECKED Then ClipPut($nVal)

    EndSwitch
    WEnd

    [/autoit]

    Vielleicht kann's ja jemand gebrauchen.

    #e1
    Version mit Live-Rechnung:

    Spoiler anzeigen
    [autoit]

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

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

    $spCfg = @ScriptDir & "\Config.cfg"
    $nX = FileReadLine($spCfg, 1)
    $nY = FileReadLine($spCfg, 2)
    $nRadio = FileReadLine($spCfg, 3)

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

    $hGUI = GUICreate("Prozentrechner", 220, 70)
    GUISetFont(-1, 10, 400, 0, "Lucida Console")
    GUISetBkColor(0xE6E6E6)

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

    $cPerc = GUICtrlCreateInput("0", 18.33, 17.5, 50, 20)
    GUICtrlSetTip(-1, "Auszurechnender Prozentwert (in %)")
    $cUpDown = GUICtrlCreateUpdown(-1)

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

    $c100 = GUICtrlCreateInput("0", 81.66, 17.5, 120, 20, 0x2000)
    GUICtrlSetTip(-1, "100% entsprechen dem eingegebenem Wert")

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

    $cVal = GUICtrlCreateLabel("0", 25, 50, 110, 15, 0x01)
    GUICtrlSetFont(-1, -1, -1, 4)
    GUICtrlSetTip(-1, "Erechneter numerischer Wert")

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

    $cCopy = GUICtrlCreateCheckbox("Autokopie", 145, 47)
    GUICtrlSetTip(-1, "Aktiviert das automatische Hinzufügen des Ergebnisses in die Zwischenablage")
    If $nRadio = $GUI_CHECKED Then GUICtrlSetState(-1, $GUI_CHECKED)
    If $nRadio = $GUI_UNCHECKED Then GUICtrlSetState(-1, $GUI_UNCHECKED)

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

    GUICtrlCreateGroup("", 5, 0, 210, 45)

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

    If Not $nX = "" And Not $nY = "" Then WinMove("Prozentrechner", "", $nX, $nY)

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

    GUISetState(@SW_SHOW, $hGUI)

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

    AdlibRegister("_Calculate", 50)

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg

    Case $GUI_EVENT_CLOSE
    AdlibUnRegister("_Calculate")
    $aPos = WinGetPos("Prozentrechner")
    $bCopy = GUICtrlRead($cCopy)

    FileDelete($spCfg)
    FileWriteLine($spCfg, $aPos[0])
    FileWriteLine($spCfg, $aPos[1])
    FileWriteLine($spCfg, $bCopy)
    Exit

    EndSwitch
    WEnd

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

    Func _Calculate()
    $bCopy = GUICtrlRead($cCopy)
    $nPerc = GUICtrlRead($cPerc)
    $n100 = GUICtrlread($c100)

    $nVal = ($n100 / 100) * $nPerc

    GUICtrlSetData($cVal, $nVal)
    If $bCopy = $GUI_CHECKED Then ClipPut($nVal)
    EndFunc

    [/autoit]

    Gruß Steffen

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o

    Einmal editiert, zuletzt von YellowWeedSeed (11. Mai 2014 um 18:11)

  • Prozentrechnung ist doch aber mehr als nur x/y * 100. Es gibt ja mehrere Möglichkeiten das zu rechnen.
    Was wirklich schön wäre, wäre wenn du eine Live-Rechnung einbauen würdest.
    Das bedeutet in etwa so viel, das das Ergebnis sofort angezeigt wird und man nicht extra auf den "=" Button klicken muss.
    Aber für den Anfang ist das ja gut gelungen.

  • Ich weiß, für meine Zwecke war es ausreichend.
    Ich schau mal was sich machen lässt :)

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o

  • Wo hast du diese Notation her?

    $pCfg für einen Pfad... Ich kenne die Schreibweise als $spCfg, wobei das s den Datentyp, und das p den Verwendungszweck angibt (wie auch in der ungarischen Notation gedacht), aber ein p allein signalisiert für gewöhnlich einen Zeiger / Pointer, und das ist in AutoIt bei einem String nicht so. ^^
    Generell ist die Notation $(Typ)(Zweck)(Name) in AutoIt eher unüblich und selten, man nimmt eher $(Typ)(Name)[Langer Zweck], also anstatt $spConfig die Variante $sConfigPath, man lässt es also in den Namen einfließen. Das lässt sich auch leichter und schöner lesen, denn im Standard sind nur die Datentyppräfixe vorgegeben - diese Zweckpräfixe nicht, daher würde sich jeder nach Gutdünken eigene ausdenken.

    Und $hPerc = GUICtrlCreateInput ist auch so eine Sache. Die GUICtrlCreate...-Funktionen geben eigentlich nie ein Handle zurück, sondern eine Control-ID. Nach Basisdatentypen handelt es sich hier um einen Integer-Wert, der AutoIt-Standard schreibt aber die Verwendung von c als Präfix vor, also z.B. $cPerc.
    Das zählt natürlich nicht für GUICreate!

  • Habe lange nicht mehr mit AutoIt programmiert, das ist was hängen geblieben ist :rolleyes:
    Aber hier mal eine Version mit Live-Rechnung:

    Spoiler anzeigen
    [autoit]

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

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

    $spCfg = @ScriptDir & "\Config.cfg"
    $nX = FileReadLine($spCfg, 1)
    $nY = FileReadLine($spCfg, 2)
    $nRadio = FileReadLine($spCfg, 3)

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

    $hGUI = GUICreate("Prozentrechner", 220, 70)
    GUISetFont(-1, 10, 400, 0, "Lucida Console")
    GUISetBkColor(0xE6E6E6)

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

    $cPerc = GUICtrlCreateInput("0", 18.33, 17.5, 50, 20)
    GUICtrlSetTip(-1, "Auszurechnender Prozentwert (in %)")
    $cUpDown = GUICtrlCreateUpdown(-1)

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

    $c100 = GUICtrlCreateInput("0", 81.66, 17.5, 120, 20, 0x2000)
    GUICtrlSetTip(-1, "100% entsprechen dem eingegebenem Wert")

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

    $cVal = GUICtrlCreateLabel("0", 25, 50, 110, 15, 0x01)
    GUICtrlSetFont(-1, -1, -1, 4)
    GUICtrlSetTip(-1, "Erechneter numerischer Wert")

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

    $cCopy = GUICtrlCreateCheckbox("Autokopie", 145, 47)
    GUICtrlSetTip(-1, "Aktiviert das automatische Hinzufügen des Ergebnisses in die Zwischenablage")
    If $nRadio = $GUI_CHECKED Then GUICtrlSetState(-1, $GUI_CHECKED)
    If $nRadio = $GUI_UNCHECKED Then GUICtrlSetState(-1, $GUI_UNCHECKED)

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

    GUICtrlCreateGroup("", 5, 0, 210, 45)

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

    If Not $nX = "" And Not $nY = "" Then WinMove("Prozentrechner", "", $nX, $nY)

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

    GUISetState(@SW_SHOW, $hGUI)

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

    AdlibRegister("_Calculate", 50)

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg

    Case $GUI_EVENT_CLOSE
    AdlibUnRegister("_Calculate")
    $aPos = WinGetPos("Prozentrechner")
    $bCopy = GUICtrlRead($cCopy)

    FileDelete($spCfg)
    FileWriteLine($spCfg, $aPos[0])
    FileWriteLine($spCfg, $aPos[1])
    FileWriteLine($spCfg, $bCopy)
    Exit

    EndSwitch
    WEnd

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

    Func _Calculate()
    $bCopy = GUICtrlRead($cCopy)
    $nPerc = GUICtrlRead($cPerc)
    $n100 = GUICtrlread($c100)

    $nVal = ($n100 / 100) * $nPerc

    GUICtrlSetData($cVal, $nVal)
    If $bCopy = $GUI_CHECKED Then ClipPut($nVal)
    EndFunc

    [/autoit]

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o

  • Off-Topic bezogen auf den Kommentar von chesstiger

    Ich kenne die Schreibweise als $spCfg, wobei das s den Datentyp, und das p den Verwendungszweck angibt (wie auch in der ungarischen Notation gedacht), aber ein p allein signalisiert für gewöhnlich einen Zeiger / Pointer, und das ist in AutoIt bei einem String nicht so. ^^


    Bezieht sich die Klammer auf den Datentyp und den Zweck oder nur auf den Zweck? Falls ersteres der Fall ist: Der ursprüngliche Verwendungszweck der ungarischen Notation ist es Variablen gleichen Typs zu unterscheiden, deren Verwendungszweck bzw. Inhalt so unterschiedlich ist dass es ein großer Fehler wäre sie in irgendeiner Form zu kombinieren. Das Angeben des Typs ist erst später hinzugekommen und gibt dem Programmierer keine zusätzlichen Informationen, da man erstens einen (groben) Überblick über seine Variablen haben sollte und zweitens seine Variablen so benennen sollte, dass automatisch klar ist von welchem Typ die Variable ist und was in ihr gespeichert wurde. Ich bin mir natürlich dessen bewusst, dass die Angabe des Typs gerade Anfängern (und natürlich auch allen anderen) eine Hilfe sein kann.

    Die ungarische Notation macht vor allem Sinn wenn es darum geht Fehler im Code hervorzuheben: Wenn man zum Beispiel Benutzereingaben verwaltet ist eine Unterscheidung zwischen string und unsafe string sinnvoll, da man bei einer Zeile wie $sMessage = $usMessage sofort sieht, dass da irgendwas falsch ist.

    Da sich die andere Form der ungarischen Notation mit der Angabe des Datentyps allerdings fest in AutoIt eingebürgert hat und sich das auch in Zukunft wahrscheinlich nicht ändern wird ist dieser Post eigentlich vollkommen unnötig, vor allem da das ganze Thema sowieso Off-Topic ist. Ich wollte das aber trotzdem mal erwähnt haben. :)