1

Тема: AHK: Нестандартный калькулятор

Помогите создать нестандартый калькулятор, GUI оболочка для него уже создана но как "оживить" незнаю.
http://habrastorage.org/files/e12/e0f/7b6/e12e0f7b629e43d9bb007b88a38a2fc5.jpg

  • 1 строка: ввести число которое нужно
    2 выбрать "/" или "*"
    3 строка:ввести на сколько / или *
    5 выбрать "-" или "+" сколько процентов
    6 строка: ввести сколько - или + процентов

Результат копируеться в буфер или на место введенего числа.


Gui, Add, Edit, x62 y93 w50 h20 vPrice,
Gui, Add, DropDownList, x112 y93 w30 h20 , /|*
Gui, Add, Edit, x142 y93 w30 h20 vValuta
Gui, Add, DropDownList, x172 y93 w30 h21 , +|-
Gui, Add, Edit, x202 y93 w30 h20 vProc

2 (изменено: serzh82saratov, 2015-01-20 03:29:07)

Re: AHK: Нестандартный калькулятор

6 строка: ввести сколько - или + процентов

Не ясно процентов изначальной цены, или после операции со вторым числом.


oSC := ComObjCreate("ScriptControl"), oSC.Language := "VBScript"
Gui, Add, Edit, x62 y93 w50 h20 vPrice Number, 50
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign1, /|*
Gui, Add, Edit, x+1 yp w30 hp vValuta Number, 2
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign2, +|-
Gui, Add, Edit, x+1 yp w30 hp vProc Number, 10
Gui, Add, Button, x+1 yp w30 hp gRes, =
Gui, Show
Return

Res:
    Gui, Submit, NoHide
    r := oSC.Eval(Price sign1 Valuta sign2 (Price / 100 * Proc))
    r := RTrim(RTrim(r,"0"),".")
    MsgBox % r
    Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

3

Re: AHK: Нестандартный калькулятор

Com-объект ScriptControl только под 32-бит работает, на форуме более общие варианты обсуждались, вроде.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

4 (изменено: niceice, 2015-01-20 03:40:46)

Re: AHK: Нестандартный калькулятор

serzh82saratov пишет:

Не ясно процентов изначальной цены, или после операции со вторым числом.

После операции с / или *.
Да  и где можно новую версию AHK скачать? А то у меня ерор выбил.
Обновил, не работает. Не показывает результат и не копирует в буфер не делает ничего.

5

Re: AHK: Нестандартный калькулятор

После операции с / или *.

oSC := ComObjCreate("ScriptControl"), oSC.Language := "JavaScript"
Gui, Add, Edit, x62 y93 w50 h20 vPrice Number, 50
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign1, /|*
Gui, Add, Edit, x+1 yp w30 hp vValuta Number, 2
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign2, +|-
Gui, Add, Edit, x+1 yp w30 hp vProc Number, 10
Gui, Add, Button, x+1 yp w30 hp gRes, =
Gui, Show
Return

Res:
    Gui, Submit, NoHide
    If (Price = "" || Valuta = "" || Proc = "")
    {
        MsgBox Не введено число
        Return
    }
    r := oSC.Eval(Price sign1 Valuta sign2 (oSC.Eval(Price sign1 Valuta) / 100 * Proc))
    r := RTrim(RTrim(r,"0"),".")
    MsgBox % r
    Return

Да  и где можно новую версию AHK скачать?

У меня в подписи.

Com-объект ScriptControl только под 32-бит работает, на форуме более общие варианты обсуждались, вроде.

Я не видел, вот например недавно была тема, и на это никто не обратил внимание.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

6 (изменено: niceice, 2015-01-20 04:00:19)

Re: AHK: Нестандартный калькулятор

У меня 64-бит система.
Ерор -

0x80040154 - Класс не зарегистрирован
         line#
----> 001: oSC :=ComObjCreate("ScriptControl"), oSC.Language := "JavaScript"

Но запускаеться, но не работает. Ahk обновил.
Еще заметил что "." и "," нельзя использовать при вводе в строку. С чем проблема связана?

7

Re: AHK: Нестандартный калькулятор

У меня 64-бит система.

Анк нужен Unicode 32-bit.
Ну а вообще можно наверное и без ScriptControl:


Gui, Add, Edit, x62 y93 w50 h20 vPrice Number, 50
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign1, /|*
Gui, Add, Edit, x+1 yp w30 hp vValuta Number, 2
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign2, +|-
Gui, Add, Edit, x+1 yp w30 hp vProc Number, 10
Gui, Add, Button, x+1 yp w30 hp gRes, =
Gui, Show
Return

Res:
    Gui, Submit, NoHide
    If (Price = "" || Valuta = "" || Proc = "")
    {
        MsgBox Не введено число
        Return
    }
    r := Calc(Price, sign1, Valuta)
    r := Calc(r, sign2, r / 100 * Proc)
    r := RTrim(RTrim(r,"0"),".") 
    MsgBox % r
    Return

Calc(num1, sign, num2)  {
    Return sign = "/" ? num1 / num2 : sign = "*" ? num1 * num2 : sign = "+" ? num1 + num2 : sign = "-" ? num1 - num2 : ""
}
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

8

Re: AHK: Нестандартный калькулятор

Еще заметил что "." и "," нельзя использовать при вводе в строку. С чем проблема связана?

Убрать опцию Number у Edit.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

9

Re: AHK: Нестандартный калькулятор

serzh82saratov пишет:

Убрать опцию Number у Edit.

Спасибо! Работает.

Clipboard := r

Если добавить ↑ строку в код, будет копировать в буфер результат?

10 (изменено: serzh82saratov, 2015-01-20 04:16:47)

Re: AHK: Нестандартный калькулятор

С проверкой символов, и поддержкой запятых:


Gui, Add, Edit, x62 y93 w50 h20 vPrice, 50
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign1, /|*
Gui, Add, Edit, x+1 yp w30 hp vValuta, 2
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign2, +|-
Gui, Add, Edit, x+1 yp w30 hp vProc, 10
Gui, Add, Button, x+1 yp w30 hp gRes, =
Gui, Show
Return

Res:
    Gui, Submit, NoHide
    If (Price = "" || Valuta = "" || Proc = "") || (Price Valuta Proc ~= "[^0-9\.,]")
    {
        MsgBox Error
        Return
    }
    StringReplace, Price, Price, `, , ., 1 
    StringReplace, Valuta, Valuta, `, , ., 1 
    StringReplace, Proc, Proc, `, , ., 1 
    r := Calc(Price, sign1, Valuta)
    r := Calc(r, sign2, r / 100 * Proc)
    r := RTrim(RTrim(r,"0"),".") 
    MsgBox % r
    Return

Calc(n1, sign, n2)  {
    Return sign = "/" ? n1 / n2 : sign = "*" ? n1 * n2 
        : sign = "+" ? n1 + n2 : sign = "-" ? n1 - n2 : ""
}

Если добавить ↑ строку в код, будет копировать в буфер результат?

А если самому проверить?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

11

Re: AHK: Нестандартный калькулятор

serzh82saratov пишет:

А если самому проверить?

Спасибо за помощь!
Немного добавил в код и изменил.

gui, +alwaysontop -border 
Gui, Add, Edit, x2 y3 w50 h20 vPrice, 50
Gui, Add, DropDownList, x52 y3 w30 h21 r2 Choose1 vsign1, /|*
Gui, Add, Edit, x82 y3 w20 h20 vValuta, 2
Gui, Add, DropDownList, x102 y3 w30 h21 r2 Choose1 vsign2, +|-
Gui, Add, Edit, x132 y3 w30 h20 vProc, 10
Gui, Show, 
Return

GuiClose:
ExitApp

Enter::
    Gui, Submit, NoHide
    If (Price = "" || Valuta = "" || Proc = "")
    {
        MsgBox Не введено число
        Return
    }
    r := Calc(Price, sign1, Valuta)
    r := Calc(r, sign2, r / 100 * Proc)
    r := RTrim(RTrim(r,"0"),".") 
    Clipboard := r
    Return

Calc(num1, sign, num2)  {
    Return sign = "/" ? num1 / num2 : sign = "*" ? num1 * num2 : sign = "+" ? num1 + num2 : sign = "-" ? num1 - num2 : ""
}

12

Re: AHK: Нестандартный калькулятор

Для избежания ошибок и удобства, я бы посоветовал вариант "С проверкой символов, и поддержкой запятых".

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

13

Re: AHK: Нестандартный калькулятор

serzh82saratov пишет:

Для избежания ошибок и удобства, я бы посоветовал вариант "С проверкой символов, и поддержкой запятых".

Спасибо что подметили, старую версию в скопировал.

14

Re: AHK: Нестандартный калькулятор

serzh82saratov пишет:

Com-объект ScriptControl только под 32-бит работает, на форуме более общие варианты обсуждались, вроде.

Я не видел, вот например недавно была тема, и на это никто не обратил внимание.

Вот, например:

JS := GetObjJScript()
MsgBox, % JS.eval("5*5") . "`n" . JS.eval("Math.pow(2, 8)")

GetObjJScript()
{
   code =
   (LTrim
   <component>
   <public><method name='eval'/></public>
   <script language='JScript'></script>
   </component>
   )
   
   if !FileExist(ComObjFile := A_ScriptDir "\JS.wsc")
      FileAppend, % code, % ComObjFile
      
   Return ComObjGet("script:" . ComObjFile)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15

Re: AHK: Нестандартный калькулятор

А, да, видел, но забыл.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

16 (изменено: niceice, 2015-01-20 06:09:53)

Re: AHK: Нестандартный калькулятор

teadrinker пишет:

Вот, например:

JS := GetObjJScript()
MsgBox, % JS.eval("5*5") . "`n" . JS.eval("Math.pow(2, 8)")

GetObjJScript()
{
   code =
   (LTrim
   <component>
   <public><method name='eval'/></public>
   <script language='JScript'></script>
   </component>
   )
   
   if !FileExist(ComObjFile := A_ScriptDir "\JS.wsc")
      FileAppend, % code, % ComObjFile
      
   Return ComObjGet("script:" . ComObjFile)
}

То есть с помощью AHK можно совместить Gui с jacascript кодом страницы?
Манипулировать объектами на странице и создавать скрипты для браузера?

17

Re: AHK: Нестандартный калькулятор

niceice пишет:

То есть с помощью AHK можно совместить Gui с jacascript кодом страницы?
Манипулировать объектами на странице и создавать скрипты для браузера?

Можно, но только не с помощью этого примера. Здесь просто выполняется javascript-код, передаваемый объекту.
Лучше так:

JS := GetObjJScript()
MsgBox, % JS.eval("5*5") . "`n" . JS.eval("Math.pow(2, 8)")

GetObjJScript()
{
   if !FileExist(ComObjFile := A_ScriptDir "\JS.wsc")
      FileAppend,
         (LTrim
            <component>
            <public><method name='eval'/></public>
            <script language='JScript'></script>
            </component>
         ), % ComObjFile
   Return ComObjGet("script:" . ComObjFile)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

18 (изменено: niceice, 2015-01-20 06:36:14)

Re: AHK: Нестандартный калькулятор

teadrinker пишет:

]
Можно, но только не с помощью этого примера.

Можете показать пример на примере этого кода калькулятора

+ код калькулятора
gui, +alwaysontop -border 
Gui, Add, Edit, x2 y3 w90 h20 vPrice, 50
Gui, Add, DropDownList, x92 y3 w30 h21 r2 Choose1 vsign1, /|*
Gui, Add, Edit, x122 y3 w20 h20 vValuta, 23.45000076
Gui, Add, DropDownList, x142 y3 w30 h21 r2 Choose1 vsign2, -|+
Gui, Add, Edit, x172 y3 w30 h0 vProc, 10
Gui, Show, x457 y97 h20 w100, New GUI Window
Return

:*:lp::
ExitApp

~$enter::
    Gui, Submit, NoHide
    If (Price = "" || Valuta = "" || Proc = "") || (Price Valuta Proc ~= "[^0-9\.,]")
    {
        MsgBox Error
        Return
    }
    StringReplace, Price, Price, `, , ., 1 
    StringReplace, Valuta, Valuta, `, , ., 1 
    StringReplace, Proc, Proc, `, , ., 1 
    r := Calc(Price, sign1, Valuta)
    r := Calc(r, sign2, r / 100 * Proc)
    r := RTrim(RTrim(r,"0"),".") 
    Clipboard := r
    Return

Calc(n1, sign, n2)  {
    Return sign = "/" ? n1 / n2 : sign = "*" ? n1 * n2 
        : sign = "+" ? n1 + n2 : sign = "-" ? n1 - n2 : ""
}


чтобы конечная сумма отправлялась в строку ввода у которого name="price". Возможно такое?

19

Re: AHK: Нестандартный калькулятор

Возможно, только не ясно как вы это увязываете с javascript.

GuiControl, , Price , % r
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

20

Re: AHK: Нестандартный калькулятор

niceice пишет:

Можете показать пример на примере этого кода калькулятора

Даже не знаю, у меня он так выглядит:

https://cloclo20.cloud.mail.ru/weblink/thumb/xw1/01ca17bdc70b/2015.01.20-05.41.28.6.jpg

Куда здесь что вводить?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

21

Re: AHK: Нестандартный калькулятор

serzh82saratov пишет:

Возможно, только не ясно как вы это увязываете с javascript.

GuiControl, , Price , % r

Отправить r в строку GUI vMainPrice, а с строки vMainPrice в name=Price. Но как не знаю.

(function(){
      $('[name="Price"]').val($('[name="MainPrice"]').val());
   });

22 (изменено: niceice, 2015-01-20 06:53:46)

Re: AHK: Нестандартный калькулятор

teadrinker пишет:
niceice пишет:

Можете показать пример на примере этого кода калькулятора

Даже не знаю, у меня он так выглядит:

https://cloclo20.cloud.mail.ru/weblink/thumb/xw1/01ca17bdc70b/2015.01.20-05.41.28.6.jpg

Куда здесь что вводить?

Я не знал как сделать сроку в которую посылались бы расчитаные числа поэтому оно копируется в буфер. Вот на этом коде, но здесь только меседжбокс.

+ с MsgBox
Gui, Add, Edit, x62 y93 w50 h20 vPrice, 50
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign1, /|*
Gui, Add, Edit, x+1 yp w30 hp vValuta, 2
Gui, Add, DropDownList, x+1 yp w40 hp r2 Choose1 vsign2, +|-
Gui, Add, Edit, x+1 yp w30 hp vProc, 10
Gui, Add, Button, x+1 yp w30 hp gRes, =
Gui, Show
Return

Res:
    Gui, Submit, NoHide
    If (Price = "" || Valuta = "" || Proc = "") || (Price Valuta Proc ~= "[^0-9\.,]")
    {
        MsgBox Error
        Return
    }
    StringReplace, Price, Price, `, , ., 1 
    StringReplace, Valuta, Valuta, `, , ., 1 
    StringReplace, Proc, Proc, `, , ., 1 
    r := Calc(Price, sign1, Valuta)
    r := Calc(r, sign2, r / 100 * Proc)
    r := RTrim(RTrim(r,"0"),".") 
    MsgBox % r
    Return

Calc(n1, sign, n2)  {
    Return sign = "/" ? n1 / n2 : sign = "*" ? n1 * n2 
        : sign = "+" ? n1 + n2 : sign = "-" ? n1 - n2 : ""
}

23

Re: AHK: Нестандартный калькулятор

Отправить r в строку GUI vMainPrice, а с строки vMainPrice в name=Price.

Что это всё означает?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

24

Re: AHK: Нестандартный калькулятор

serzh82saratov пишет:

Что это всё означает?

Создать строку в AHK Gui с  названием vMainPrice и в строку будет отправляться "r" с калькулятора,а уже с строки vMainPrice будет отправляться в строку в браузер у которой name="Price".

25

Re: AHK: Нестандартный калькулятор

Всем привет. У меня вопрос вовсе не про калькулятор, но т.к. подобный вопрос обсуждался здесь, оставлю сообщение в этой теме.

В общем, помучавшись с DOM, извлечением строк и парсингом в ie 11, решил, что оно того не стоит, и, как советовали мудрые люди, пора переходить на javascript.

Но тут встала другая проблема: как выполнить js-скрипт в уже загруженном документе? Есть конечно вариант с загрузкой кода через адресную строку, но, как мне кажется, это не есть лучшее исполнение. К тому же, ie пытается блокировать эти действия, что тоже не есть хорошо.

Честно облазил все два форума с AHK, но подобного примера так и не нашел. Есть слишком серьезные скрипты (ну, для меня по крайней мере) ), может в них чего-то и было, но расшифровать их не удалось.

Если кто-то занимался подобным или в курсе, чего оно из себя представляет - скиньте, плиз, пример.
С меня устная благодарность)