beginner calculator

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
Alcrkai
Posts: 47
Joined: 16 Mar 2021, 10:51

beginner calculator

Post by Alcrkai » 08 Jun 2021, 12:35

Good afternoon

I need help with my NumpadEnter, I would like when it is clicked it performs the expression, but this is not happening

Code: Select all

va:="%"
global v
Gui, Font, S23 CWhite Bold , italac
Gui, Add, Edit, x2 y9 w320 h90 -VScroll ReadOnly vEdit1  cblack	0x2	number	,
Gui, Font, S10 CWhite Bold , italac
Gui, Add, Button, x2 y109 w80 h40 	             	       gpor  			, %va%
Gui, Add, Button, x82 y109 w80 h40                       graiz            , √
Gui, Add, Button, x162 y109 w80 h40                   	gaoq	       , x²
Gui, Add, Button, x242 y109 w80 h40	                     gsla         , ¹/x
Gui, Add, Button, x2 y149 w80 h40      	                 glimpa			, CE
Gui, Add, Button, x82 y149 w80 h40       	             gclear			, C
Gui, Add, Button, x162 y149 w80 h40         	         gdel			, DEL
Gui, Add, Button, x242 y149 w80 h40				 		gdiv			 , /
Gui, Add, Button, x2 y189 w80 h40 							gsete			 , 7
Gui, Add, Button, x82 y189 w80 h40	 					goito 			, 8
Gui, Add, Button, x162 y189 w80 h40 					gnove 			, 9
Gui, Add, Button, x242 y189 w80 h40 					 gmult			, *
Gui, Add, Button, x2 y229 w80 h40 							 gquatro			, 4
Gui, Add, Button, x82 y229 w80 h40 						 gcinco			, 5
Gui, Add, Button, x162 y229 w80 h40 					 gseis			, 6
Gui, Add, Button, x242 y229 w80 h40	 					 gsub			, -
Gui, Add, Button, x2 y269 w80 h40 							 gum			, 1
Gui, Add, Button, x82 y269 w80 h40           			 gdois			, 2
Gui, Add, Button, x162 y269 w80 h40 					 gtres			, 3
Gui, Add, Button, x242 y269 w80 h40 					 gadd			, +
Gui, Add, Button, x2 y309 w80 h40 						 	 ginverte			, ±
Gui, Add, Button, x82 y309 w80 h40 						 gzero			, 0
Gui, Add, Button, x162 y309 w80 h40 					 gvir			, ,
Gui, Add, Button, x242 y309 w80 h40 					 gigual			, =

Gui, Show, w330 h361, Calculadora
return

GuiClose:
ExitApp

um:
GuiControl, ,Edit1, 1
return
dois:
return
tres:
return
quatro:
return
cinco:
return
seis:
return
sete:
return
oito:
return
nove:
return
zero:
return
add:
return
sub:
return
mult:
return
div:
return
vir:
return
inverte:
return
del:
return
clear:
return
limpa:
return
raiz:
return
por:
return
sla:
return
igual:
return
aoq:
return


#ifwinactive Calculadora

~Numpad0::
Gui,	Submit,	NoHide
v=%Edit1%0
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad1::
Gui,	Submit,	NoHide
v=%Edit1%1
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad2::
Gui,	Submit,	NoHide
v=%Edit1%2
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad3::
Gui,	Submit,	NoHide
v=%Edit1%3
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad4::
Gui,	Submit,	NoHide
v=%Edit1%4
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad5::
Gui,	Submit,	NoHide
v=%Edit1%5
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad6::
Gui,	Submit,	NoHide
v=%Edit1%6
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad7::
Gui,	Submit,	NoHide
v=%Edit1%7
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad8::
Gui,	Submit,	NoHide
v=%Edit1%8
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad9::
Gui,	Submit,	NoHide
v=%Edit1%9
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadMult::
Gui,	Submit,	NoHide
v=%Edit1%*
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadDiv::
Gui,	Submit,	NoHide
v=%Edit1%/
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadSub::
Gui,	Submit,	NoHide
v=%Edit1%-
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadAdd::
Gui,	Submit,	NoHide
v=%Edit1%+
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadDot::
Gui,	Submit,	NoHide
v=%Edit1%,
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadEnter::
GuiControlGet, v , ,Edit1
v = %v%
r := v
MsgBox % r
GuiControl, ,Edit1,%r%
return

User avatar
rommmcek
Posts: 1480
Joined: 15 Aug 2014, 15:18

Re: beginner calculator

Post by rommmcek » 08 Jun 2021, 13:37

There is a lot to improve! To start:

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

va:="%"
global v
Gui, Font, S23 CWhite Bold , italac
Gui, Add, Edit, x2 y9 w320 h90 -VScroll ReadOnly vEdit1  cblack	0x2	number	,
Gui, Font, S10 CWhite Bold , italac
Gui, Add, Button, x2 y109 w80 h40 	             	       gpor  			, `% ;%va%
Gui, Add, Button, x82 y109 w80 h40                       graiz            , √
Gui, Add, Button, x162 y109 w80 h40                   	gaoq	       , x²
Gui, Add, Button, x242 y109 w80 h40	                     gsla         , ¹/x
Gui, Add, Button, x2 y149 w80 h40      	                 glimpa			, CE
Gui, Add, Button, x82 y149 w80 h40       	             gclear			, C
Gui, Add, Button, x162 y149 w80 h40         	         gdel			, DEL
Gui, Add, Button, x242 y149 w80 h40				 		gdiv			 , /
Gui, Add, Button, x2 y189 w80 h40 							gsete			 , 7
Gui, Add, Button, x82 y189 w80 h40	 					goito 			, 8
Gui, Add, Button, x162 y189 w80 h40 					gnove 			, 9
Gui, Add, Button, x242 y189 w80 h40 					 gmult			, *
Gui, Add, Button, x2 y229 w80 h40 							 gquatro			, 4
Gui, Add, Button, x82 y229 w80 h40 						 gcinco			, 5
Gui, Add, Button, x162 y229 w80 h40 					 gseis			, 6
Gui, Add, Button, x242 y229 w80 h40	 					 gsub			, -
Gui, Add, Button, x2 y269 w80 h40 							 gum			, 1
Gui, Add, Button, x82 y269 w80 h40           			 gdois			, 2
Gui, Add, Button, x162 y269 w80 h40 					 gtres			, 3
Gui, Add, Button, x242 y269 w80 h40 					 gadd			, +
Gui, Add, Button, x2 y309 w80 h40 						 	 ginverte			, ±
Gui, Add, Button, x82 y309 w80 h40 						 gzero			, 0
Gui, Add, Button, x162 y309 w80 h40 					 gvir			, ,
Gui, Add, Button, x242 y309 w80 h40 					 gigual			, =

Gui, Show, w330 h361, Calculadora
return

GuiEscape:
GuiClose:
ExitApp

um:
GuiControl, ,Edit1, 1
return
dois:
return
tres:
return
quatro:
return
cinco:
return
seis:
return
sete:
return
oito:
return
nove:
return
zero:
return
add:
return
sub:
return
mult:
return
div:
return
vir:
return
inverte:
return
del:
return
clear:
return
limpa:
return
raiz:
return
por:
return
sla:
return
igual:
Gosub ~NumpadEnter
return
aoq:
return


#ifwinactive Calculadora

~Numpad0::
Gui,	Submit,	NoHide
v=%Edit1%0
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad1::
Gui,	Submit,	NoHide
v=%Edit1%1
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad2::
Gui,	Submit,	NoHide
v=%Edit1%2
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad3::
Gui,	Submit,	NoHide
v=%Edit1%3
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad4::
Gui,	Submit,	NoHide
v=%Edit1%4
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad5::
Gui,	Submit,	NoHide
v=%Edit1%5
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad6::
Gui,	Submit,	NoHide
v=%Edit1%6
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad7::
Gui,	Submit,	NoHide
v=%Edit1%7
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad8::
Gui,	Submit,	NoHide
v=%Edit1%8
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~Numpad9::
Gui,	Submit,	NoHide
v=%Edit1%9
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadMult::
Gui,	Submit,	NoHide
v=%Edit1%*
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadDiv::
Gui,	Submit,	NoHide
v=%Edit1%/
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadSub::
Gui,	Submit,	NoHide
v=%Edit1%-
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadAdd::
Gui,	Submit,	NoHide
v=%Edit1%+
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadDot::
Gui,	Submit,	NoHide
v=%Edit1%,
GuiControl, ,Edit1,%v%
GuiControlGet, v , ,Edit1
return

~NumpadEnter::
GuiControlGet, v , ,Edit1
v = %v%
r := v
;MsgBox % r
r:= eval(r)
GuiControl, ,Edit1,%r%
return

; see alternatives @ https://www.autohotkey.com/boards/viewtopic.php?f=76&t=90458
; eval by Laszlo:
; https://autohotkey.com/board/topic/4779-simple-script-for-evaluating-arithmetic-__Expressions/page-3
Eval(__) {                               ; __Expression preprocessing
   Static pi = 3.141592653589793, e = 2.718281828459045

   StringReplace __, __,`%, \, All       ; % -> \ for MOD
   ;~ __ := RegExReplace(__,"\s*")       ; remove whitespace - already done above
   __ := RegExReplace(__,"([a-zA-Z]\w*)([^\w\(]|$)","%$1%$2") ; var -> %var%
   Transform __, Deref, %__%             ; dereference all %var%

   StringReplace __, __, -, #, All       ; # = subtraction
   StringReplace __, __, (#, (0#, All    ; (-x -> (0-x
   If (Asc(__) = Asc("#"))
      __ = 0%__%                         ; leading -x -> 0-x
   StringReplace __, __, (+, (, All      ; (+x -> (x
   If (Asc(__) = Asc("+"))
      StringTrimLeft __, __, 1           ; leading +x -> x
   StringReplace __, __, **, @, All      ; ** -> @ for easier process

   Loop {                                ; find innermost (..)
      If !RegExMatch(__, "(.*)\(([^\(\)]*)\)(.*)", _)
         Break
      __ := _1 . Eval@(_2) . _3          ; replace "(x)" with value of x
   }
   Return Eval@(__)                      ; no more (..)
}

Eval@(__) {
   RegExMatch(__, "(.*)(\+|\#)(.*)", _)  ; execute rightmost +- operator
   IfEqual _2,+,  Return Eval@(_1) + Eval@(_3)
   IfEqual _2,#,  Return Eval@(_1) - Eval@(_3)
                                        ; execute rightmost */% operator
   RegExMatch(__, "(.*)(\*|\/|\\)(.*)", _)
   IfEqual _2,*,  Return Eval@(_1) * Eval@(_3)
   IfEqual _2,/,  Return Eval@(_1) / Eval@(_3)
   IfEqual _2,\,  Return Mod(Eval@(_1),Eval@(_3))
                                        ; execute rightmost power
   StringGetPos ___, __, @, R
   IfGreaterOrEqual ___,0, Return Eval@(SubStr(__,1,___)) ** Eval@(SubStr(__,2+___))
                                        ; execute rightmost function
   If !RegExMatch(__,".*(abs|floor|sqrt)(.*)", _)
      Return __                         ; no more function
   IfEqual _1,abs,  Return abs(  Eval@(_2))
   IfEqual _1,floor,Return floor(Eval@(_2))
   IfEqual _1,sqrt, Return sqrt( Eval@(_2))
}
[Edit]: Enabled Click on "igual".
bye!

Post Reply

Return to “Ask for Help (v1)”