Jump to content

Recommended Posts

Posted

I came across this great script from Valuater and I loved it. I am trying to make a calculator using the script and it was working great until I started to make the functions. I don't know how to find out if a button is pressed using that script. Can anyone help me?

#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <XSkin.au3>

Global $C
Global $D
Global $E
Opt("GUIOnEventMode", 1)

$skins =  @ScriptDir & "\Skins\red-black"
$Calculator = XSkinGUICreate("Calculator", 255, 265, $skins)
$ExitButton = XSkinButton("X", 330, 7, 16, 16, "Close")
$MinimizeButton = XSkinButton("_", 310, 7, 16, 16, "Minimize")
GUICtrlSetFont(-1, 9.5, 800)
$Input = GUICtrlCreateInput("", 58, 60, 240, 21)
GUICtrlSetBkColor(-1, 0xECEBE9)
GUICtrlSetLimit(-1, 39)
$FractionBar = XSkinButton("Ab/c", 58, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Clear = XSkinButton("Clear", 159, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Fraction_Decimal = XSkinButton("F <> D", 109, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Delete = XSkinButton("Delete", 209, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Percent = XSkinButton("%", 58, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Exponent = XSkinButton("^", 58, 157, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$SqaureRoot = XSkinButton("Sqrt", 58, 190, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$ClearVar = XSkinButton("ClrVar", 58, 223, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Recall = XSkinButton("Recall", 58, 256, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Store = XSkinButton("Sto >", 58, 289, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Tangent = XSkinButton("Tan", 109, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Sine = XSkinButton("Sin", 159, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Cosine = XSkinButton("Cos", 209, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Divide = XSkinButton("/", 259, 124, 41, 30)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
$Graph = XSkinButton("Graph", 259, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Multiply = XSkinButton("X", 259, 164, 41, 30)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Subtract = XSkinButton("-", 259, 204, 41, 30)
GUICtrlSetFont(-1, 13, 800, 0, "Arial")
$Add = XSkinButton("+", 259, 244, 41, 30)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$Equals = XSkinButton("=", 259, 283, 41, 32)
GUICtrlSetFont(-1, 12, 800, 0, "Arial")
$Seven = XSkinButton("7", 109, 157, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Eight = XSkinButton("8", 159, 157, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Nine = XSkinButton("9", 209, 157, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Four = XSkinButton("4", 109, 199, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Five = XSkinButton("5", 159, 199, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Six = XSkinButton("6", 209, 199, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$One = XSkinButton("1", 109, 241, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Two = XSkinButton("2", 159, 241, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Three = XSkinButton("3", 209, 241, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Decimal = XSkinButton(".", 159, 283, 41, 32)
GUICtrlSetFont(-1, 12, 800, 0, "Arial")
$Negative = XSkinButton("+/-", 209, 283, 41, 32)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
$Zero = XSkinButton("0", 109, 283, 41, 32)
GUISetState()

While 1
    MouseOver()
    GUISwitch($Calculator)
    $msg = GUIGetMsg()
    Switch $msg
        Case $Zero
            calc("nul")
        Case $One
            calc(1)
        Case $Two
            calc("2")
        Case $Three
            calc("3")
        Case $Four
            calc("4")
        Case $Five
            calc("5")
        Case $Six
            calc("6")
        Case $Seven
            calc("7")
        Case $Eight
            calc("8")
        Case $Nine
            calc("9")
    EndSwitch
    $ResultText = GUICtrlRead($Input)
WEnd

Func calc($num)
    Local $3 = 0, $Result = GUICtrlRead($Input), $Test = 0, $string1, $string2, $string3
    If $num = 'get' Then
        If StringInStr($Result, 'A') Then
            $string1 = StringReplace($Result, 'A', $C)
            $3 = 1
        EndIf
        If StringInStr($Result, 'B') Then
            $string2 = StringReplace($string1, 'B', $D)
            $3 = 2
        EndIf
        If StringInStr($Result, 'C') Then
            $string3 = StringReplace($string2, 'C', $E)
            $3 = 3
        EndIf
        If $3 = 1 Then
            $p = Execute('$string1')
        ElseIf $3 = 2 Then
            $p = Execute('$string2')
        ElseIf $3 = 3 Then
            $p = Execute('$string3')
        ElseIf $3 = 0 Then
            $p = Execute('GUICtrlRead($Input)')
        EndIf
        $p = Execute($p)
        If @error Then
            If $C = '' Or Not IsDeclared($C) Then
                GUICtrlSetData($Input, 'Variable has not been declared')
                $Test = 1
            ElseIf $D = '' Or Not IsDeclared($D) Then
                GUICtrlSetData($Input, 'Variable has not been declared')
                $Test = 1
            ElseIf $E = '' Or Not IsDeclared($E) Then
                GUICtrlSetData($Input, 'Variable has not been declared')
                $Test = 1
            EndIf
            If $Test = 0 Then
                GUICtrlSetData($Input, 'Syntax ERROR')
            EndIf
        Else
            GUICtrlSetData($Input, $p)
        EndIf
    ElseIf $num = 'nul' Then
        GUICtrlSetData($Input, $ResultText & 0)
    Else
        GUICtrlSetData($Input, $num)
    EndIf
EndFunc  ;==>calc
Posted

Firstly, I was making this as a learning experience. Second, I don't understand what I am supposed to do. Where do I type in the command?

Posted (edited)

He meant that you should use the Windows Calculator.

This is where you can find what button that has been pressed in your GUI.

$msg = GUIGetMsg()
Switch $msg
        Case $Zero
            calc("nul")
......

But since you have the line Opt("GUIOnEventMode", 1) you should use GUISetOnEvent instead. It's all in the helpfile.

I advice you to start with the tutorials and read the helpfile.

Edited by Pain
Posted

That OnEventMode shouldn't have been in there. I tried replacing the calc function with just Run("Notepad.exe"), but that doesn't even work. My problem has to do with not receiving the message at all. I don't know why.

Posted

Please note XSkin update

http://www.autoitscript.com/forum/index.ph...st&p=633323

Your working code...

#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <XSkin.au3>

Global $C
Global $D
Global $E
;Opt("GUIOnEventMode", 1)

$skins =  @ScriptDir & "\Skins\red-black"
$Calculator = XSkinGUICreate("Calculator", 357, 370, $skins)
$ExitButton = XSkinButton("X", 330, 7, 16, 16, "Closer")
$MinimizeButton = XSkinButton("_", 310, 7, 16, 16, "Minimizer")
GUICtrlSetFont(-1, 9.5, 800)
$Input = GUICtrlCreateInput("", 58, 60, 240, 21)
GUICtrlSetBkColor(-1, 0xECEBE9)
GUICtrlSetLimit(-1, 39)
$FractionBar = GUICtrlCreateButton("Ab/c", 58, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Clear = XSkinButton("Clear", 159, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Fraction_Decimal = XSkinButton("F <> D", 109, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Delete = XSkinButton("Delete", 209, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Percent = XSkinButton("%", 58, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Exponent = XSkinButton("^", 58, 157, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$SqaureRoot = XSkinButton("Sqrt", 58, 190, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$ClearVar = XSkinButton("ClrVar", 58, 223, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Recall = XSkinButton("Recall", 58, 256, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Store = XSkinButton("Sto >", 58, 289, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Tangent = XSkinButton("Tan", 109, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Sine = XSkinButton("Sin", 159, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Cosine = XSkinButton("Cos", 209, 124, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Divide = XSkinButton("/", 259, 124, 41, 30)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
$Graph = XSkinButton("Graph", 259, 91, 41, 26)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Multiply = XSkinButton("X", 259, 164, 41, 30)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Subtract = XSkinButton("-", 259, 204, 41, 30)
GUICtrlSetFont(-1, 13, 800, 0, "Arial")
$Add = XSkinButton("+", 259, 244, 41, 30)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$Equals = XSkinButton("=", 259, 283, 41, 32)
GUICtrlSetFont(-1, 12, 800, 0, "Arial")
$Seven = XSkinButton("7", 109, 157, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Eight = XSkinButton("8", 159, 157, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Nine = XSkinButton("9", 209, 157, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Four = XSkinButton("4", 109, 199, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Five = XSkinButton("5", 159, 199, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Six = XSkinButton("6", 209, 199, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$One = XSkinButton("1", 109, 241, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Two = XSkinButton("2", 159, 241, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Three = XSkinButton("3", 209, 241, 41, 32)
GUICtrlSetFont(-1, 8, 800, 0, "Arial")
$Decimal = XSkinButton(".", 159, 283, 41, 32)
GUICtrlSetFont(-1, 12, 800, 0, "Arial")
$Negative = XSkinButton("+/-", 209, 283, 41, 32)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
$Zero = XSkinButton("0", 109, 283, 41, 32)
GUISetState()

While 1
    $msg = MouseOver() ; for XSkin buttons
    
    $msg2 = GUIGetMsg(); for other non-XSkin stuff
    Switch $msg
        Case $Zero
            calc("nul")
        Case $One
            calc(1)
        Case $Two
            calc("2")
        Case $Three
            calc("3")
        Case $Four
            calc("4")
        Case $Five
            calc("5")
        Case $Six
            calc("6")
        Case $Seven
            calc("7")
        Case $Eight
            calc("8")
        Case $Nine
            calc("9")
    EndSwitch
    $ResultText = GUICtrlRead($Input)
    If $msg2 = $FractionBar Then MsgBox(4096, "Test", "You pressed FractionBar   ", 3)
WEnd

Func Closer()
    Exit
EndFunc

Func Minimizer()
    GUISetState(@SW_MINIMIZE)
EndFunc    

Func calc($num)
    Local $3 = 0, $Result = GUICtrlRead($Input), $Test = 0, $string1, $string2, $string3
    If $num = 'get' Then
        If StringInStr($Result, 'A') Then
            $string1 = StringReplace($Result, 'A', $C)
            $3 = 1
        EndIf
        If StringInStr($Result, 'B') Then
            $string2 = StringReplace($string1, 'B', $D)
            $3 = 2
        EndIf
        If StringInStr($Result, 'C') Then
            $string3 = StringReplace($string2, 'C', $E)
            $3 = 3
        EndIf
        If $3 = 1 Then
            $p = Execute('$string1')
        ElseIf $3 = 2 Then
            $p = Execute('$string2')
        ElseIf $3 = 3 Then
            $p = Execute('$string3')
        ElseIf $3 = 0 Then
            $p = Execute('GUICtrlRead($Input)')
        EndIf
        $p = Execute($p)
        If @error Then
            If $C = '' Or Not IsDeclared($C) Then
                GUICtrlSetData($Input, 'Variable has not been declared')
                $Test = 1
            ElseIf $D = '' Or Not IsDeclared($D) Then
                GUICtrlSetData($Input, 'Variable has not been declared')
                $Test = 1
            ElseIf $E = '' Or Not IsDeclared($E) Then
                GUICtrlSetData($Input, 'Variable has not been declared')
                $Test = 1
            EndIf
            If $Test = 0 Then
                GUICtrlSetData($Input, 'Syntax ERROR')
            EndIf
        Else
            GUICtrlSetData($Input, $p)
        EndIf
    ElseIf $num = 'nul' Then
        GUICtrlSetData($Input, $ResultText & 0)
    Else
        GUICtrlSetData($Input, $num)
    EndIf
EndFunc  ;==>calc

8)

NEWHeader1.png

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...