Автор Тема: Несложный калькулятор  (Прочитано 4728 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GUIMish [?]

  • Новичок
  • *
  • Сообщений: 122
  • Репутация: 12
  • Пол: Мужской
    • GUIMish
    • Награды
  • Версия AutoIt: 3.3.12.0
Несложный калькулятор
« Создано: Апрель 30, 2013, 17:00:59 »
У меня AutoIt: 3.3.8.1
Версия моей программки: 1.5
Юникод: UDF 16

Скриншот ▼
Нажмите для отображения изображения в оригинальном размере.
Код: AutoIt [Выделить]
;~ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;~ 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

« Последнее редактирование: Май 01, 2013, 01:40:10 от CreatoR »
С Уважением GUIMish

Русское сообщество AutoIt

Несложный калькулятор
« Отправлен: Апрель 30, 2013, 17:00:59 »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 461
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Несложный калькулятор
« Ответ #1, Отправлен: Апрель 30, 2013, 17:17:02 »
 :shaman_s_bubnom: ну ты шаман

Оффлайн _ToBe_ [?]

  • Осваивающий
  • **
  • Сообщений: 142
  • Репутация: 34
    • Награды
Re: Несложный калькулятор
« Ответ #2, Отправлен: Май 01, 2013, 00:21:40 »
А ещё было бы прикольно, если б можно было вычисления с клавиатуры производить :)

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Несложный калькулятор
« Ответ #3, Отправлен: Май 01, 2013, 01:59:20 »
_ToBe_  [?]
Цитировать
ещё было бы прикольно, если б можно было вычисления с клавиатуры производить
Добавь перед GUISetState():

Код: AutoIt [Выделить]
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:
Код: AutoIt [Выделить]
$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])
 

« Последнее редактирование: Май 01, 2013, 02:04:21 от CreatoR »


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt

Re: Несложный калькулятор
« Ответ #3 Отправлен: Май 01, 2013, 01:59:20 »

Оффлайн eBennet [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Несложный калькулятор
« Ответ #4, Отправлен: Май 26, 2013, 01:31:46 »
ссылка:http://image2you.ru/38243/1019656/ [nonactive]

Оффлайн Sashqa [?]

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Несложный калькулятор
« Ответ #5, Отправлен: Июнь 07, 2013, 02:42:31 »
Вот пытаюсь разобрать код, на основе этого написать свой калькулятор и не понимаю некоторые строки, объясните, пожалуйста.

Код: AutoIt [Выделить]
 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 [?]

  • Осваивающий
  • **
  • Сообщений: 157
  • Репутация: 30
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Несложный калькулятор
« Ответ #6, Отправлен: Июнь 09, 2013, 10:25:01 »
обнаружен баг:
в mswin калькулятор при умножении 2222222222222 на 5555555555555 выдает 1,234567901234321e+25
а тут только минус, аКа ' - '.
 :)
UPD
если ввести 1+= то поле ввода очистится (промежуточного вычисления не будет)

и тоже расскажите пожалуйста про _IncCodL, что она делает; не разобрался.
« Последнее редактирование: Июнь 09, 2013, 10:32:16 от damien2008 »

Русское сообщество AutoIt

Re: Несложный калькулятор
« Ответ #6 Отправлен: Июнь 09, 2013, 10:25:01 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
33 Ответов
25463 Просмотров
Последний ответ Сентябрь 08, 2016, 11:14:58
от AlexM22204
25 Ответов
16287 Просмотров
Последний ответ Июль 29, 2010, 23:48:12
от CreatoR
4 Ответов
2428 Просмотров
Последний ответ Октябрь 03, 2011, 19:04:28
от WSWR
7 Ответов
3219 Просмотров
Последний ответ Октябрь 15, 2011, 16:12:03
от Trans
6 Ответов
7384 Просмотров
Последний ответ Декабрь 20, 2011, 05:04:22
от joiner
0 Ответов
1594 Просмотров
Последний ответ Май 02, 2013, 17:05:58
от CreatoR
6 Ответов
2009 Просмотров
Последний ответ Апрель 27, 2014, 08:50:06
от Salofun
7 Ответов
5640 Просмотров
Последний ответ Апрель 15, 2015, 23:19:58
от CreatoR