Что нового

[Математика] Калькулятор с плюшками

Salofun

Новичок
Сообщения
7
Репутация
0
Добрый вечер, господа.
Версия AutoIt: 3.3.10.2
Перейдем к делу?
Описание:
[list type=decimal]
[*]умеет суммировать и вычитать целые числа
[*]ответ(то что после =) при клике идет в буфер обмена, при вводе чисел в поля 1 и 2 авто расчет ответа мгновенный
[/list]
интерфейс:
[list type=decimal]
[*]Имеет три поля, два для ввода цифр (до 5 символов) и одно = 6 символов, кнопки отсутствуют есть только поля, между полем 1 и полем два стоит символ + который при клике меняется на -
[*]Малогаборитный до 30px в высоту и иммет функцию поверх всех окон, закрыть можно через трей
[/list]
Ну и если уж совсем не лень, справа добавить кнопочку добавить строку например + которая будет вызывать еще 1 аналогичную строку, только справа не плюс а крестик, тобишь удалитт строку.
Спасибо тому, кто поможет! Могу на html css накидать желаемый дизайн.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Salofun
Код:
#include <WindowsConstants.au3>
#include <EditConstants.au3>
$Form1 = GUICreate("Калькулятор", 379, 29, 192, 124)
$Input1 = GUICtrlCreateInput("2", 6, 3, 97, 21, $ES_NUMBER)
GUICtrlSetLimit(-1,5)
$Label1 = GUICtrlCreateLabel("+", 105, 5, 18, 17, $ES_NUMBER)
$Input2 = GUICtrlCreateInput("10", 129, 2, 121, 21, $ES_NUMBER)
GUICtrlSetLimit(-1,5)
$Input3 = GUICtrlCreateInput("", 254, 2, 121, 21)
GUISetState(@SW_SHOW)
WinSetOnTop($Form1,'',1)
$Reg = 0
While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Label1
			if GUICtrlRead($Label1) == "+" Then
				GUICtrlSetData($Label1,'-')
			Else
				GUICtrlSetData($Label1,'+')
			EndIf
	EndSwitch
	if $Reg <> GUICtrlRead($Input1) Then
		$Reg = Execute(GUICtrlRead($Input1)&GUICtrlRead($Label1)&GUICtrlRead($Input2))
		GUICtrlSetData($Input3,$Reg)
		ClipPut($Reg)
		$Reg = GUICtrlRead($Input1)
	EndIf
WEnd


...
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Salofun [?]
справа добавить кнопочку добавить строку например + которая будет вызывать еще 1 аналогичную строку, только справа не плюс а крестик, тобишь удалитт строку
Это я не понял. Остальное примерно так (клик по "=" копирует ответ в буфер обмена)
Код:
#include <WindowsConstants.au3>
#include <EditConstants.au3>

GUICreate("Калькулятор с плюшками", 195, 30, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$inp1 = GUICtrlCreateInput("", 5, 5, 40, 20, $ES_NUMBER)
$btn1 = GUICtrlCreateButton("+", 50, 5, 20, 20)
$inp2 = GUICtrlCreateInput("", 75, 5, 40, 20, $ES_NUMBER)
$btn2 = GUICtrlCreateButton("=", 120, 5, 20, 20)
$inp3 = GUICtrlCreateInput("", 145, 5, 45, 20, $ES_READONLY)
GUISetState()

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $btn1
      If GUICtrlRead($btn1) = "+" Then
        GUICtrlSetData($btn1, "-")
      Else
        GUICtrlSetData($btn1, "+")
      EndIf
    Case $btn2
      $str = GUICtrlRead($inp3)
      If $str Then ClipPut($str)
  EndSwitch
Until 0

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  If ($lParam = GUICtrlGetHandle($inp1) Or $lParam = GUICtrlGetHandle($inp2)) And BitShift($wParam, 16) = $EN_CHANGE Then _
    GUICtrlSetData($inp3, Execute(GUICtrlRead($inp1) & GUICtrlRead($btn1) & GUICtrlRead($inp2)))
  Return "GUI_RUNDEFMSG"
EndFunc
 
Автор
S

Salofun

Новичок
Сообщения
7
Репутация
0
Про добавление новой строки:
я имел виду, чтобы при нажатие на определённую кнопку, открывался под калькулятором, еще один аналогичный калькулятор, и так до бесконечности (а закрывался бы на крестик, который вместо кнопки добавить, у всех, кроме 1 строки)

Можно туда горячие клавиши запихнуть, чтобы работали, даже если окно не в таргете?
к примеру ctrl+1 и вводишь текст и оно идет в поле 1, ctrl+2 в поле 2, ctrl+3 меняет +/- ctrl+4 результат в буфер обмена. Соответственно, при нажатие ctrl+1, или ctrl+2 данные в выбранном поле очищаются.

По дизайну понял, что хочу:
Убрать windows бордеры, рамки, оставить просто
m8IhigJ.png
что внутри красного выделения.

p.s точно последнее :D можно сделать, чтобы при обновление результата (поля 3), автоматический шло в буфер обмена? (Только при обновление)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Salofun
Добавил горячие клавиши, убрал рамку (перемещать можно за рабочую область), добавил автокопирование результата и автопересчёт при смене знака.
Код:
#include <WindowsConstants.au3>
#include <EditConstants.au3>

HotKeySet("^1", "SetFocus")
HotKeySet("^2", "SetFocus")
HotKeySet("^3", "ChangeBtn")
HotKeySet("^4", "CopyResult")

$gui = GUICreate("Калькулятор с плюшками", 195, 30, -1, -1, BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_CONTROLPARENT))
$inp1 = GUICtrlCreateInput("", 5, 5, 40, 20, $ES_NUMBER)
$btn1 = GUICtrlCreateButton("+", 50, 5, 20, 20)
$inp2 = GUICtrlCreateInput("", 75, 5, 40, 20, $ES_NUMBER)
$btn2 = GUICtrlCreateButton("=", 120, 5, 20, 20)
$inp3 = GUICtrlCreateInput("", 145, 5, 45, 20, $ES_READONLY)
GUISetState()

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $btn1
      ChangeBtn()
    Case $btn2
      CopyResult()
  EndSwitch
Until 0

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  If ($lParam = GUICtrlGetHandle($inp1) Or $lParam = GUICtrlGetHandle($inp2)) And BitShift($wParam, 16) = $EN_CHANGE Then
    GUICtrlSetData($inp3, Execute(GUICtrlRead($inp1) & GUICtrlRead($btn1) & GUICtrlRead($inp2)))
    CopyResult()
  EndIf
  Return "GUI_RUNDEFMSG"
EndFunc

Func ChangeBtn()
  If GUICtrlRead($btn1) = "+" Then
    GUICtrlSetData($btn1, "-")
  Else
    GUICtrlSetData($btn1, "+")
  EndIf
  GUICtrlSetData($inp1, GUICtrlRead($inp1))
EndFunc

Func CopyResult()
  Local $str = GUICtrlRead($inp3)
  If $str Then ClipPut($str)
EndFunc

Func SetFocus()
  Local $inp = Eval("inp" & StringRight(@HotKeyPressed, 1))
  WinActivate($gui)
  GUICtrlSetData($inp, "")
  ControlFocus($gui, "", $inp)
EndFunc
 
Автор
S

Salofun

Новичок
Сообщения
7
Репутация
0
InnI,
Благодарю! Все, как я хотел :ok: репки кинуть пока не могу, но ты в списке 8)
 
Верх