Что нового

Самый маленький калькулятор

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Калькулятор разработан всей конференцией AutoIt - у вас получиться меньше семи строк ? =)

Код:
Global $hMain = GUICreate("Main", 300, 300, -1, -1, 268435456), $hEnter = GUICtrlCreateInput("", 10, 10, 250, 20), $hResult = GUICtrlCreateInput("", 10, 40, 250, 20)
GUIRegisterMsg(0x0111, "Calc")
Do
Until GUIGetMsg() = -3
Func Calc($hWnd, $Msg, $wParam, $lParam)
        GUICtrlSetData($hResult, Execute(GUICtrlRead($hEnter)))
EndFunc
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
FlatX007 [?]
у вас получиться меньше семи строк ? =)
Легко ;)
Код:
Global $hMain = GUICreate("Main", 300, 300, -1, -1, 268435456), $hEnter = GUICtrlCreateInput("", 10, 10, 250, 20), $hResult = GUICtrlCreateInput("", 10, 40, 250, 20), $lol = GUIRegisterMsg(0x0111, "Calc")
Do
Until GUIGetMsg() = -3
Func Calc($hWnd, $Msg, $wParam, $lParam)
        GUICtrlSetData($hResult, Execute(GUICtrlRead($hEnter)))
EndFunc



Добавлено:
Сообщение автоматически объединено:

Код:
$sString = '0'
Do
	$sString = InputBox('Calc', $sString & ' = ' & Execute($sString), $sString)
Until @error Or $sString = ''
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
FlatX007 [?]
у вас получиться меньше семи строк ? =)
Да:

Код:
Global $hMain = GUICreate("TinyCalc", 300, 120, -1, -1, 268435456), $hEnter = GUICtrlCreateInput("", 10, 15, 275, 20), $hResult = GUICtrlCreateInput("", 10, 50, 275, 20, 2048), $iGRM = GUIRegisterMsg(0x0111, "Calc")
Do
Until GUIGetMsg() = -3
Func Calc()
	Local $s = (StringRegExp(GUICtrlRead($hEnter), '[\+\-\*\/\^]') And GUICtrlSetData($hResult, Execute(GUICtrlRead($hEnter)))) Or GUICtrlSetData($hResult, '')
EndFunc


:laugh:


Добавлено:
Сообщение автоматически объединено:

4 строчки!

Код:
Global $hGUI = GUISetState(@SW_SHOW, GUICreate("TinyCalc", 300, 120, -1, -1, -2134376448)), $nEnter = GUICtrlCreateInput("", 10, 15, 280, 20), $nResult = GUICtrlCreateInput("", 10, 50, 280, 20, 2048), $nCalcResult = GUICtrlCreateButton("Calc", 10, 90, 280, 20)
Do
	$nMsg = GUIGetMsg()
Until ($nMsg = $nCalcResult And (GUICtrlSetData($nResult, Execute(GUICtrlRead($nEnter))) = -999)) Or ($nMsg = -3)
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
CreatoR сказал(а):
Почти совершенно, уменьшил до трёх
Код:
Global $hGUI = GUISetState(@SW_SHOW, GUICreate("TinyCalc", 300, 120, -1, -1, -2134376448)), $nEnter = GUICtrlCreateInput("", 10, 15, 280, 20), $nResult = GUICtrlCreateInput("", 10, 50, 280, 20, 2048), $nCalcResult = GUICtrlCreateButton("Calc", 10, 90, 280, 20), $nMsg
Do
Until (Not Assign('nMsg', GUIGetMsg())) Or ($nMsg = $nCalcResult And (GUICtrlSetData($nResult, Execute(GUICtrlRead($nEnter))) = -999)) Or ($nMsg = -3)



Добавлено:
Сообщение автоматически объединено:

Соответственно две строчки с InputBox
Код:
Do
Until Not Assign('sString', Eval('sString')) Or Not Assign('sString', InputBox('Calc', $sString & " = " & Execute($sString), $sString)) Or $sString = ''

SciTe так удивляется, что выдаёт ошибку.


Добавлено:
Сообщение автоматически объединено:

Довёл таки скрипт Creator'а до двух строчек, до одной пока не выходит :laugh:
Код:
Do
Until (Eval('hGUI') = '' And (Not Assign('hGUI', GUISetState(@SW_SHOW, GUICreate("TinyCalc", 300, 120, -1, -1, -2134376448))) Or Not Assign('nEnter', GUICtrlCreateInput("", 10, 15, 280, 20)) Or Not Assign('nResult', GUICtrlCreateInput("", 10, 50, 280, 20, 2048)) Or Not Assign('nCalcResult', GUICtrlCreateButton("Calc", 10, 90, 280, 20)) Or Not Assign('nMsg', 0))) Or Not Assign('nMsg', GUIGetMsg()) Or ($nMsg = $nCalcResult And (GUICtrlSetData($nResult, Execute(GUICtrlRead($nEnter))) = -999)) Or $nMsg = -3
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Вся официальная конференция AutoIt нервно курит в сторонке
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Это не калькулятор, а Wrapper для функции Execute()... :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
snoitaleR [?]
Это не калькулятор
хочешь сказать, он не считает :whistle:


Добавлено:
Сообщение автоматически объединено:

Belfigor сказал(а):
Вся официальная конференция AutoIt нервно курит в сторонке
Это ты нервно куришь в сторонке, а тут идет мозговой штурм ;)
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Kaster
Хочу сказать, что можно и одной строкой: :smile:

Код:
MsgBox(0,"Калькулятор",Execute("2+2"))
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
snoitaleR [?]
Хочу сказать, что можно и одной строкой
хм.. вот как раз у тебя не калькулятор.
уважающий себя калькулятор должен позволять вводить данные в неограниченном кол-ве и выдавать результат без необходимости править каждый раз код ;)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
Меньше уже некуда.

Код:
Run('calc.exe')
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Kaster
Тут уже было принесено в жертву все, что только можно, кроме ввода...
Поэтому можно уже на мелочах не останавливаться... :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Kaster сказал(а):
snoitaleR [?]
Это не калькулятор
хочешь сказать, он не считает :whistle:

Добавлено:
Сообщение автоматически объединено:
Belfigor сказал(а):
Вся официальная конференция AutoIt нервно курит в сторонке
Это ты нервно куришь в сторонке, а тут идет мозговой штурм ;)



Не понимаю на что именно в моем посте ты сагрился, но таки разъясню: ввиду имел я официальную конференцию автоит на которой 7 строк были придуманы и названы минимумом, а не русскоязычную где развитие пошло дальше
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Belfigor
1. если ты говоришь с человеком не играющим в твои игры, будь добр говори на человеческом языке, иначе рискуешь быть не понятым.
2.
ввиду имел я официальную конференцию автоит на которой 7 строк были придуманы и названы минимумом, а не русскоязычную где развитие пошло дальше
эти 7 строк не были названы минимум, если перечитаешь первый пост еще раз то все встанет на свои места. это тема наз-ся самый маленький калькулятор, ну а дальше предлагается в форме шутки показать свои версии.
3. под конференцией автор топика подразумевал [email protected] - и она и есть русская. и над этими 7 строками "поработали" всего 2 человека - я и FlatX007, опять же шутки ради. у тебя проблемы с юмором? ;) ты просто предупреди сразу, чтобы люди пометки делали в своих сообщениях.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
dwerf [?]
Почти совершенно, уменьшил до трёх
:shok: я забыл про Assign, а ведь знал что как то можно использовать GUIGetMsg более одного разща без задержек.

SciTe так удивляется, что выдаёт ошибку.
Можно везде использовать Eval:

Код:
Do
Until (Eval('hGUI') = '' And (Not Assign('hGUI', GUISetState(@SW_SHOW, GUICreate("TinyCalc", 300, 120, -1, -1, -2134376448))) Or Not Assign('nEnter', GUICtrlCreateInput("", 10, 15, 280, 20)) Or Not Assign('nResult', GUICtrlCreateInput("", 10, 50, 280, 20, 2048)) Or Not Assign('nCalcResult', GUICtrlCreateButton("Calc", 10, 90, 280, 20)) Or Not Assign('nMsg', 0))) Or Not Assign('nMsg', GUIGetMsg()) Or (Eval('nMsg') = Eval('nCalcResult') And (GUICtrlSetData(Eval('nResult'), Execute(GUICtrlRead(Eval('nEnter')))) = -999)) Or Eval('nMsg') = -3


до одной пока не выходит
И не выйдет, цикл на одной строчке не построить.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
SyDr [?]
написать калькулятор в одну строчку можно
С GUI и с постоянным вводом пользователя? хотелось бы на это посмотреть...
 

SyDr

Сидра
Сообщения
651
Репутация
158
:
Я конечно, понимаю, что это нечестно. Но всё же >_<

Код:
StringLeft(Assign("OriginalScript", FileRead(@ScriptFullPath)) & FileDelete(@ScriptFullPath) & FileWrite(@ScriptFullPath, "#NoTrayIcon" & @CRLF & "Do" & @CRLF & "Until (Eval('hGUI') = '' And (Not Assign('hGUI', GUISetState(@SW_SHOW, GUICreate('TinyCalc', 300, 120, -1, -1, -2134376448))) Or Not Assign('nEnter', GUICtrlCreateInput('', 10, 15, 280, 20)) Or Not Assign('nResult', GUICtrlCreateInput('', 10, 50, 280, 20, 2048)) Or Not Assign('nCalcResult', GUICtrlCreateButton('Calc', 10, 90, 280, 20)) Or Not Assign('nMsg', 0))) Or Not Assign('nMsg', GUIGetMsg()) Or (Eval('nMsg') = Eval('nCalcResult') And (GUICtrlSetData(Eval('nResult'), Execute(GUICtrlRead(Eval('nEnter')))) = -999)) Or Eval('nMsg') = -3") & RunWait(@AutoItExe & ' "' & @ScriptFullPath & '"') & FileDelete(@ScriptFullPath) & FileWrite(@ScriptFullPath, Eval("OriginalScript")) & MsgBox(4096, Default, "Win!"), -1)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
SyDr
не. так не считается ;)
так можно и в 1000 строк написать код, и пихнуть его в 1
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
Я только что пришёл к похожему решению!

Код:
$TinyCalc = Assign('hFile', FileOpen(@TempDir & '\~Tmp.au3', 2)) And FileWrite(Eval('hFile'), 'Global $nMain=GUICreate("TinyCalc",300,120,-1,-1,268435456),$nEnter=GUICtrlCreateInput("",10,15,275,20),$nResult=GUICtrlCreateInput("",10,50,275,20,2048),$iGRM=GUIRegisterMsg(0x0111,"Calc")'&@LF&'Do'&@LF&'Until GUIGetMsg()=-3'&@LF&'Func Calc()'&@LF&'Local $s=(StringRegExp(GUICtrlRead($nEnter),"[\+\-\*\/\^]")And GUICtrlSetData($nResult,Execute(GUICtrlRead($nEnter))))Or GUICtrlSetData($nResult,"")'&@LF&'EndFunc') And FileClose(Eval('hFile')) And Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\~Tmp.au3"') And Sleep(500) And FileDelete(@TempDir & '\~Tmp.au3')



Добавлено:
Сообщение автоматически объединено:

Kaster [?]
так не считается
Это почему, мы используем одну строчку, что происходит дальше, уже никого не волнует! :laugh: :IL_AutoIt_1:

так можно и в 1000 строк написать код, и пихнуть его в 1
Ну да, это ответ тем, кто говорил что на AutoIt нельзя написать всю программу в одну строчку, как это можно сделать например на C++.


Добавлено:
Сообщение автоматически объединено:

SyDr
Твой пример не будет работать если скомпилировать скрипт :blum:

И даже болше чем не работать, он подвергнет систему массовой аттаке скриптов ;D.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
CreatoR [?]
Ну да, это ответ тем, кто говорил что на AutoIt нельзя написать всю программу в одну строчку, как это можно сделать например на C++.
я говорил, и до сих пор говорю :smile:
нельзя написать код в 1 строку. без привлечения вспомогательного. в С можно, достаточно отделять блоки друг от друга парными {}
 
Верх