Secret Calculator

  • Hab am Montag Abend Panik geschoben wegen eines Tests und hab dies zur Beruhigung geschrieben.

    Ein Calculator der durch seine extreme Einfachheit bestechen soll :P .
    Einfach nur eine Inputbox in der man eine Rechnung durchführen kann.
    War dann doch schon zu spät, um weitere Funktionen hinzuzufügen (und auch nicht unbedingt notwendig).
    Das witzige ist, dass er auf der Desktopoberfläche kaum auffällt und sich über einen einfachen Tastendruck
    verstecken lässt.

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------
    AutoIt Version: 3.2.11.3

    Name: Secret Calculator
    Version: 1.0.0.8
    Datum: 24.03.2008

    Author: Patric Pendelin eMail: <patric.pendelin (at) gmx.de>


    Info: Einfacher Calculator mit simplen Funktionen, der darauf aufbaut nicht durch seine
    ausgefeilte GUI ins Gewicht zu fallen.

    Script Function:

    Fixes:

    To Do:
    Möglichkeiten zur Erweiterung sind:
    -weitere mathematische Funktionen hinzufügen.
    -Komplett ohne sichtbare GUI arbeiten (evntl. Ergebniss mit Tooltip Anzeigen lassen oder Ergebnis ins Kontextmenü übergeben).
    -Optionsmenü, dass GUI Aussehen bzw. Verhalten zur Auswahl stellt.
    -Fensterdarstellungen für verschiedene Desktopgrößen optimieren.
    #ce ----------------------------------------------------------------------------
    #NoTrayIcon
    ;===============================================================================
    ; Includes
    ;===============================================================================
    #include <WindowsConstants.au3>
    #include <GuiConstants.au3>
    #include <GuiToolBar.au3>
    ;~ #include <EditConstants.au3>
    #include <Misc.au3>
    ;
    ;===============================================================================
    ; AutoItSetOption
    ;===============================================================================
    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)
    ;
    ;===============================================================================
    ; HotKeySet
    ;===============================================================================
    HotKeySet("{PAUSE}", "_hideTool")
    HotKeySet("{PRINTSCREEN}", "_clearScreen")
    HotKeySet("!q", "_exitTool")
    HotKeySet("!s", "_MathSin")
    HotKeySet("!c", "_MathCos")
    HotKeySet("!t", "_MathTan")
    ;
    ;===============================================================================
    ; Declaring Variables
    ;===============================================================================
    Global $h_Wnd
    Global $h_Input_Display
    ;
    ;===============================================================================
    ; Start Program
    ;===============================================================================
    _main()
    ;
    ;===============================================================================
    ; Functions
    ;===============================================================================
    Func _main()
    _builtMainGUI()
    EndFunc ;==>_main
    ;
    Func _calculate($i_Value)
    GUICtrlSetData($h_Input_Display, Execute($i_Value))
    EndFunc ;==>_calculate
    ;
    ; Funktion _PrimeDown
    ; Ermöglicht das verschieben eines Popup Fensters
    ; by AspirinJunkie @ autoit.de
    ; http://www.autoit.de/index.php?page…28539#post28539
    Func _PrimeDown()
    Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    Local $WinPos = WinGetPos(@GUI_WinHandle)
    Local $MPos = MouseGetPos()
    ;
    $DifX = $MPos[0] - $WinPos[0]
    $DifY = $MPos[1] - $WinPos[1]
    While $MouseData[2]
    $MPos = MouseGetPos()
    $WinPos = WinGetPos(@GUI_WinHandle)
    If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
    WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
    EndIf
    Sleep(15)
    $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    WEnd
    EndFunc ;==>_PrimeDown
    ;
    ; Funktion _TaskbarHideButton
    ; Entfernt alle Taskbars die durch den Parameter bestimmt werden
    ; by Siao @ autoitscript.com
    ; http://www.autoitscript.com/forum/index.ph…ndpost&p=460233
    Func _TaskbarHideButton($sText, $bHide = True)
    Local $hToolbar
    Local $cId
    ;
    $hToolbar = _GUICtrlToolbar_FindToolbar("[CLASS:Shell_TrayWnd]", $sText)
    If $hToolbar = 0 Then Return False
    For $i = 0 To _GUICtrlToolbar_ButtonCount($hToolbar) - 1
    $cId = _GUICtrlToolbar_IndexToCommand($hToolbar, $i)
    If _GUICtrlToolbar_GetButtonText($hToolbar, $cId) = $sText Then
    Return _GUICtrlToolbar_HideButton($hToolbar, $cId, $bHide)
    EndIf
    Next
    Return False
    EndFunc ;==>_TaskbarHideButton
    ;
    ;===============================================================================
    ; Hotkeys
    ;===============================================================================
    ; Funktion _exitTool
    ; Beendet das Programm
    Func _exitTool()
    Exit
    EndFunc ;==>_exitTool
    ;
    ; Funktion _hideTool
    ; Aktiviert/deaktiviert das Programmfenster
    Func _hideTool()
    If WinGetState($h_Wnd, "") <> 5 Then
    GUISetState(@SW_HIDE)
    _TaskbarHideButton("Secret Calculator")
    Else
    GUISetState(@SW_SHOW)
    _TaskbarHideButton("Secret Calculator")
    EndIf
    EndFunc ;==>_hideTool
    ;
    ; Nullt die mom. Rechnung
    Func _clearScreen()
    GUICtrlSetData($h_Input_Display, "")
    EndFunc ;==>_clearScreen
    ;
    ; führt Sinus Rechnung durch
    Func _MathSin()
    Local $i_Number
    $i_Number = GUICtrlRead($h_Input_Display)
    GUICtrlSetData($h_Input_Display, Sin($i_Number))
    EndFunc ;==>_MathSin
    ;
    ; führt Cosinus Rechnung durch
    Func _MathCos()
    Local $i_Number
    $i_Number = GUICtrlRead($h_Input_Display)
    GUICtrlSetData($h_Input_Display, Cos($i_Number))
    EndFunc ;==>_MathCos
    ;
    ; führt Tan Rechnung durch
    Func _MathTan()
    Local $i_Number
    $i_Number = GUICtrlRead($h_Input_Display)
    GUICtrlSetData($h_Input_Display, Tan($i_Number))
    EndFunc ;==>_MathTan
    ;
    ;===============================================================================
    ; GUI
    ;===============================================================================
    Func _builtMainGUI()
    ;#Region ### START Koda GUI section ### Form=E:\Design\CS-Source Config\Form1_1.kxf
    $h_Wnd = GUICreate("Secret Calculator", 110, 17, Round(@DesktopWidth * 88 / 100), Round(@DesktopHeight * 86 / 100), $WS_POPUP)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_PrimeDown")
    GUISetFont(9, 400, 0, "MS Sans Serif")
    GUISetBkColor(0xffffff)
    $h_Input_Display = GUICtrlCreateInput("", 0, 0, 110, 17);, $ES_RIGHT);, $WS_EX_TRANSPARENT)
    GUISetState(@SW_SHOW)
    _TaskbarHideButton("Secret Calculator")
    ;#EndRegion ### END Koda GUI section ###
    ;
    ;================================================================================
    ; Start GUI Event-Loop
    ;================================================================================
    Local $nMsg
    Local $dll = DllOpen("user32.dll"); für Tastendruck erkennung
    While 1
    WinSetOnTop($h_Wnd, "", 1)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    ; erkennt Tastendruck und führt Bedingung aus
    If _IsPressed("0D", $dll) Then; 0D ENTER key
    _calculate(GUICtrlRead($h_Input_Display))
    EndIf
    WEnd
    DllClose($dll)
    EndFunc ;==>_builtMainGUI

    [/autoit]


    Änderungs bzw. Verbesserungsvorschläge sind natürlich gerne willkommen
    Gruß
    Patric

  • Die Funktionen kanns du auch direkt eintippen :) Mit Execute werden die ja auch ausgeführt.
    Btw. bei mir kommt für Sin(90) = 0.893996663600558 ??? -> muss aber 1 sein.

  • Ach ja :)
    Also etwa so:

    [autoit]

    #include <Math.au3>
    Global $PI = 3.14159265
    MsgBox(0, '_Sin(90) -> Eingabe in Grad', Execute("_Sin(90)"))
    MsgBox(0, 'Sin($PI/2)) -> Eingabe im Bogenmaß', Execute("Sin($PI/2)"))

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

    Func _Sin($x)
    Return Sin(_Radian($x))
    EndFunc

    [/autoit]