Что нового

Несложный калькулятор

GUIMish

Знающий
Сообщения
122
Репутация
12
У меня AutoIt: 3.3.8.1
Версия моей программки: 1.5
Юникод: UDF 16

Скриншот ▼

Код:
;~ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;~ Program Name:  Calc
;~ Author:        GUIMish
;~ Version:       1.5
;~ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Global $1, $2, $3, $4, $5, $6, $7, $8, $9, $0
Global $C, $Min, $Zap, $Plu, $Sum, $pm
Global $Code, $Cod, $Calc
Global $InRpL, $inCodL

$Window = GUICreate('Calc v.1.5', 160, 245, -1, -1, -1865809920, 262528)

$Calcu = 'θ'
;~ Меню -----------------------------------------------------
$mfile = GUICtrlCreateMenu ("Файл")
$mExit = GUICtrlCreateMenuitem ( "Выход", $mfile)

$mPra = GUICtrlCreateMenu ("Правка")
$mCopy= GUICtrlCreateMenuitem ("Копировать", $mPra)
$mPaste = GUICtrlCreateMenuitem ("Вставить", $mPra)

$mhelp = GUICtrlCreateMenu ("Help")
$minfo = GUICtrlCreateMenuitem ( "О Программе", $mhelp)
;~ ----------------------------------------------------------

GUICtrlCreateLabel (' Calc', 10, 10, 140, 50, 0x00800000)
   GUICtrlSetColor (-1, 0x9f9f9f)
   GUICtrlSetBkColor (-1, 0xffffff)
$Calcu = GUICtrlCreateEdit ('', 45, 12, 100, 15, 0x08002, 0x0088)
   GUICtrlSetState(-1, 128)
   GUICtrlSetBkColor (-1, 0xffffff)
GUISetFont (13, 1000, 2)
$Calc = GUICtrlCreateEdit ('θ', 11, 30, 135, 29, 0x08002, 0x0008)
GUICtrlSetBkColor (-1, 0xffffff)

;~ Кнопки ---------------------------------------------------
GUISetFont (10, 400, 0)
$C = GUICtrlCreateButton ('C', 9, 65, 35, 30)
$U = GUICtrlCreateButton ('*', 44, 65, 35, 30)
$R = GUICtrlCreateButton ('/', 80, 65, 35, 30)
$7 = GUICtrlCreateButton ('7', 9, 95, 35, 30)
$8 = GUICtrlCreateButton ('8', 44, 95, 35, 30)
$9 = GUICtrlCreateButton ('9', 80, 95, 35, 30)
$4 = GUICtrlCreateButton ('4', 9, 125, 35, 30)
$5 = GUICtrlCreateButton ('5', 44, 125, 35, 30)
$6 = GUICtrlCreateButton ('6', 80, 125, 35, 30)
$1 = GUICtrlCreateButton ('1', 9, 155, 35, 30)
$2 = GUICtrlCreateButton ('2', 44, 155, 35, 30)
$3 = GUICtrlCreateButton ('3', 80, 155, 35, 30)
$0 = GUICtrlCreateButton ('0', 9, 185, 70, 30)
$Zap = GUICtrlCreateButton (',', 80, 185, 35, 30)
$Min = GUICtrlCreateButton ('-', 115, 65, 35, 30)
$Plu = GUICtrlCreateButton ('+', 115, 95, 35, 60)
$Sum = GUICtrlCreateButton ('=', 115, 155, 35, 60)

;~ ----------------------------------------------------------
GUISetState()
$Pr = True
While 1
   $nMsg = GUIGetMsg()
    Switch $nMsg
	  Case -3, $mExit
		 ExitLoop
	  Case $minfo
		 MsgBox (0,"Info","Этот калькулятор был сделан" & @CRLF & "GUIMish")
	  Case $mCopy
		 ClipPut (GUICtrlRead($Calc)) 
	  Case $mPaste
		 GUICtrlSetData($Calc, ClipGet ( ))
	  Case $C
		 GUICtrlSetData ($Calc, 'θ')
		 GUICtrlSetData ($Calcu, '')
	  Case $0
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "0")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "0")
		 EndIf
	  Case $1
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "1")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "1")
		 EndIf
	  Case $2
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "2")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "2")
		 EndIf
	  Case $3
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "3")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "3")
		 EndIf
	  Case $4
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "4")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "4")
		 EndIf
	  Case $5
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "5")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "5")
		 EndIf
	  Case $6
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "6")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "6")
		 EndIf
	  Case $7
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "7")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "7")
		 EndIf
	  Case $8
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "8")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "8")
		 EndIf
	  Case $9
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, "9")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "9")
		 EndIf
	  Case $Zap
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, GUICtrlRead($Calc) & ".")
		 EndIf
	  Case $Plu
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calcu, "")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calcu, GUICtrlRead($Calcu) & GUICtrlRead($Calc) & " + ")
			GUICtrlSetData ($Calc, "")
		 EndIf
	  Case $U
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calcu, "")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calcu, GUICtrlRead($Calcu) & GUICtrlRead($Calc) & " * ")
			GUICtrlSetData ($Calc, "")
		 EndIf
	  Case $R
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calcu, "")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calcu, GUICtrlRead($Calcu) & GUICtrlRead($Calc) & " / ")
			GUICtrlSetData ($Calc, "")
		 EndIf
	  Case $Min
		 If GUICtrlRead($Calc) = 'θ' Then
			GUICtrlSetData ($Calcu, "")
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calcu, GUICtrlRead($Calcu) & GUICtrlRead($Calc) & " - ")
			GUICtrlSetData ($Calc, "")
		 EndIf
	  Case $Sum
		 If GUICtrlRead($Calc) = 'θ' Then
			
		 ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
			GUICtrlSetData ($Calc, Execute (GUICtrlRead($Calcu) & GUICtrlRead($Calc)))
			GUICtrlSetData ($Calcu, "")
		 EndIf
   EndSwitch
WEnd

Func _IncCodL($inCodL)
   $inCodL = "-1"
	  For $i = 9999 to 1 Step -1
		 If $Calc = $i Then
			$inCodL = GUICtrlRead ($Calc)
		 EndIf
	  Next
	Return $inCodL
EndFunc
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
А ещё было бы прикольно, если б можно было вычисления с клавиатуры производить :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
_ToBe_ [?]
ещё было бы прикольно, если б можно было вычисления с клавиатуры производить
Добавь перед GUISetState():

Код:
Dim $aAccelKeys[17][2]

For $i = 0 To 16
	$iCtrlID = $C + $i
	$sKey = '{' & StringLower(GUICtrlRead($iCtrlID)) & '}'
	
	$aAccelKeys[$i][0] = $sKey
	$aAccelKeys[$i][1] = $iCtrlID
Next

GUISetAccelerators($aAccelKeys, $Window)


а для исправления проблемы с раскладкой по умолчанию, поставь это перед строкой с $Window = GUICreate:
Код:
$aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", 0x04090000, "int", 0)
If Not @error And $aRet[0] Then DllCall("user32.dll", "ptr", "SendMessage", "hwnd", WinGetHandle(AutoItWinGetTitle()), "int", 0x50, "int", 1, "int", $aRet[0])
 

Sashqa

Новичок
Сообщения
4
Репутация
0
Вот пытаюсь разобрать код, на основе этого написать свой калькулятор и не понимаю некоторые строки, объясните, пожалуйста.

Код:
Case $0
         If GUICtrlRead($Calc) = 'θ' Then
            GUICtrlSetData ($Calc, "0")
         ElseIf GUICtrlRead($Calc) = _IncCodL($inCodL) Then
            GUICtrlSetData ($Calc, GUICtrlRead($Calc) & "0")
         EndIf


У меня autoit ругается на функцию _IncCodL. Что вообще делает эта функция? И зачем нужна переменная inCodL? И да, если не трудно расскажите о global, потому что эта переменная стоят в global, заранее благодарю за ответ.
 

damien2008

Осваивающий
Сообщения
178
Репутация
34
обнаружен баг:
в mswin калькулятор при умножении 2222222222222 на 5555555555555 выдает 1,234567901234321e+25
а тут только минус, аКа ' - '.
:smile:
UPD
если ввести 1+= то поле ввода очистится (промежуточного вычисления не будет)

и тоже расскажите пожалуйста про _IncCodL, что она делает; не разобрался.
 

Valeri

Новичок
Сообщения
3
Репутация
0
А как приравнять нажатие клавиши Enter к нажатию клавиши =?
 
Верх