<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK:Найти калькулятор]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14625</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14625&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK:Найти калькулятор».]]></description>
		<lastBuildDate>Sun, 03 Mar 2019 17:59:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132746#p132746</link>
			<description><![CDATA[<p>Почему это Вас останавливает, мы же htmlfile используем?<br /></p><div class="codebox"><pre><code>doc := ComObjCreate(&quot;htmlfile&quot;)
doc.write(&quot;&lt;meta http-equiv=&#039;X-UA-Compatible&#039; content=&#039;IE=9&#039;&gt;&quot;)
mathMethods := doc.parentWindow.eval(&quot;Object.getOwnPropertyNames(Math).join(&#039;|&#039;)&quot;)

expr := &quot;POW(2, 2) - Sqrt(16) + pi&quot;

try res := doc.parentWindow.eval(expr)
catch {
   while RegExMatch(expr, &quot;iO)(?&lt;!Math\.)(&quot; . mathMethods . &quot;)&quot;, match, match ? match.Pos + match.Len + 5 : 1)
      expr := RegExReplace( expr, match[1], &quot;Math.&quot; . RegExReplace(mathMethods, &quot;i).*(&quot; . match[1] . &quot;).*&quot;, &quot;$1&quot;),,, match.Pos )
   
   try res := doc.parentWindow.eval(expr)
   catch
      res := &quot;Expression is not supported&quot;
}
MsgBox, % res</code></pre></div><p>Заодно и проблема регистрозависимости решается.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Mar 2019 17:59:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132746#p132746</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132744#p132744</link>
			<description><![CDATA[<p><em>Object.getOwnPropertyNames()</em> — не классический метод, в JScript 5.8 его нет.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sun, 03 Mar 2019 17:29:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132744#p132744</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132731#p132731</link>
			<description><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>если бы с Math работал цикл for in, но это не так</p></blockquote></div><p>Но можно Object.getOwnPropertyNames(Math).<br /></p><div class="codebox"><pre><code>doc := ComObjCreate(&quot;htmlfile&quot;)
doc.write(&quot;&lt;meta http-equiv=&#039;X-UA-Compatible&#039; content=&#039;IE=9&#039;&gt;&quot;)
MsgBox, % doc.parentWindow.eval(&quot;Object.getOwnPropertyNames(Math).join(&#039;\n&#039;)&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Mar 2019 14:01:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132731#p132731</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132715#p132715</link>
			<description><![CDATA[<p>Врядли. Допустим мы ко всем функциям мы добавим такой метод, назовём его <em>calc</em>, определяющий имя функции (которое может отличаться от имени переменной указывающей на ф-цию) и проверяющий, есть ли в <em>Math</em> метод с таким именем. 1) Чем <em>sin.calc()</em> лучше <em>Math.sin()</em>? 2) Переменная sin может быть чем угодно. Тут надо работать не с функциями, а с входной строкой — искать в ней имена методов <em>Math</em>…</p><p>(with или полное перечисление были бы не нужны, если бы с <em>Math</em> работал цикл for in, но это не так.)</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sun, 03 Mar 2019 12:47:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132715#p132715</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132706#p132706</link>
			<description><![CDATA[<p>Глобальному объекту Function прописать проверку на выполнение, если не выполняется, пробовать через Math? Не часто пользуюсь js, поэтому не очень понимаю, как это правильно записать.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Mar 2019 11:56:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132706#p132706</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132705#p132705</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>можно как-то то же самое без with сделать?</p></blockquote></div><p>Можно, но насколько я могу судить, надо будет явно выписать все свойства и методы <em>Math</em>.<br /></p><div class="quotebox"><blockquote><p>Через прототипы?</p></blockquote></div><p>Это как? Нет, я знаю что такое прототипы, но что в данном случае имеется в виду, например. Т.е. можно, например, всем строкам добавить соотв. метод и использовать <em>&quot;выражение&quot;.вычислить()</em> вместо <em>вычислить(&quot;выражение&quot;)</em>, но и в этом случае либо with, либо явное перечисление.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sun, 03 Mar 2019 11:50:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132705#p132705</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132704#p132704</link>
			<description><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><div class="codebox"><pre><code>doc.write(&quot;&lt;script&gt;with (Math) var math_eval = function (str) {return eval(str);};&lt;/script&gt;&quot;)</code></pre></div></blockquote></div><p>А для общего развития, можно как-то то же самое без with сделать? Через прототипы?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Mar 2019 11:14:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132704#p132704</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132703#p132703</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>А нельзя как-то ещё регистронезависимость включить?</p></blockquote></div><p>Использовать VBScript. Но там не получится определять переменнные и использовать сложные выражения наподобие<br /></p><div class="codebox"><pre><code>fi=PI/3, x=sin(fi), y=cos(fi), pow(x,2)+pow(y,2)</code></pre></div><p>по крайней мере, естественным образом…</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sun, 03 Mar 2019 11:10:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132703#p132703</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132702#p132702</link>
			<description><![CDATA[<p><strong>MudaQ</strong><br />Если немного напрячься, можно использовать приёмы, которые здесь приведены для вашего кода из первого сообщения.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Mar 2019 11:00:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132702#p132702</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132701#p132701</link>
			<description><![CDATA[<p>Спасибо за ваш энтузиазм,но мне просто нужен обычный калькулятор чтобы я добавил его в свою гуи,если кто-то сможет найти этот калькулятор в темах или мб валяется у вас на пк - очень жду ссылку в теме,мне даже будет не жаль рейтинг подарить,очень нужно просто. &lt;3</p>]]></description>
			<author><![CDATA[null@example.com (MudaQ)]]></author>
			<pubDate>Sun, 03 Mar 2019 10:41:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132701#p132701</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132700#p132700</link>
			<description><![CDATA[<p>Для clz32 можно полифилл прописать:<br /></p><div class="codebox"><pre><code>script =
(
if (!Math.clz32) Math.clz32 = (function(log, LN2){
  return function(x) {  
    if (x == null || x === 0) {
      return 32;
    }
    return 31 - (log(x &gt;&gt;&gt; 0) / LN2 | 0);
  };
})(Math.log, Math.LN2);
)
doc.write(&quot;&lt;script&gt;&quot; . script . &quot;&lt;/script&gt;&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Mar 2019 10:30:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132700#p132700</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132698#p132698</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Почему то не работает например clz32(1).</p></blockquote></div><p>В таких случаях смотри <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32#Browser_compatibility">совместимость с браузерами</a>, у нас IE используется.<br /><strong>wisgest</strong><br />Элегантное решение. С моникером script так вышло:<br /></p><div class="codebox"><pre><code>JS := GetJScripObject()
MsgBox, % JS.(&quot;pow(2, 10)&quot;)

GetJScripObject()  {
   VarSetCapacity(tmpFile, ((MAX_PATH := 260) - 14) &lt;&lt; !!A_IsUnicode, 0)
   DllCall(&quot;GetTempFileName&quot;, Str, A_Temp, Str, &quot;AHK&quot;, UInt, 0, Str, tmpFile)
   
   FileAppend,
   (
   &lt;component&gt;
   &lt;public&gt;&lt;method name=&#039;math_eval&#039;/&gt;&lt;/public&gt;
   &lt;script language=&#039;JScript&#039;&gt;&lt;/script&gt;
   &lt;script&gt;with (Math) var math_eval = function (str) {return eval(str);};&lt;/script&gt;
   &lt;/component&gt;
   ), % tmpFile
   
   JS := ObjBindMethod( ComObjGet(&quot;script:&quot; . tmpFile), &quot;math_eval&quot; )
   FileDelete, % tmpFile
   Return JS
}</code></pre></div><p>А нельзя как-то ещё регистронезависимость включить?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Mar 2019 10:20:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132698#p132698</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132697#p132697</link>
			<description><![CDATA[<p>Да, так по интереснее. А на счёт неработающей clz32 есть идеи?<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#NoEnv
#Persistent

doc := ComObjCreate(&quot;htmlfile&quot;)

doc.write(&quot;&lt;meta http-equiv=&#039;X-UA-Compatible&#039; content=&#039;IE=9&#039;&gt;&quot;)
Maths := doc.parentWindow.eval(&quot;Object.getOwnPropertyNames(Math).join(&#039;|&#039;)&quot;)

doc.write(&quot;&lt;script&gt;with (Math) var math_eval = function (str) {return eval(str);};&lt;/script&gt;&quot;)

Global EM_SETSEL := 0x00B1, EM_GETSEL := 0xB0, EM_LINEINDEX := 0xBB, ES_NOHIDESEL := 256, hEdit, doc

Load =
(
2 + 2
pow(2, 8)
asin(1)
PI
)

Gui, +Resize +LastFound
Gui, Font, s18 q5, Calibri
Gui, Margin, 0, 0
Gui, Add, Edit, hwndhEdit w300 r6 +HScroll +%ES_NOHIDESEL%, % Load
Gui, Font, s12
  ;	https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math
Gui, Add, DDL, x10 y+10 w76 gMath vMath, ()||%Maths%
Gui, Add, Button, x+10 yp hp, Copy
Gui, Add, Button, x210 yp w80 hp gEval, =
Gui, Show, , Калькулятор
Gui, +MinSize
Sleep 10
If Load is not space
	ControlSend, , {End}{Enter}, ahk_id %hEdit%
Return

GuiClose:
   ExitApp

GuiSize:
   GuiControl, Move, %hEdit%, % &quot;w&quot; A_GuiWidth &quot; h&quot; A_GuiHeight - 44 
   GuiControl, Move, Math, % &quot;x&quot; 10 &quot; y&quot; A_GuiHeight - 34
   GuiControl, MoveDraw, Button1, % &quot;x&quot; 96 &quot; y&quot; A_GuiHeight - 34
   GuiControl, MoveDraw, Button2, % &quot;x&quot; A_GuiWidth - 90 &quot; y&quot; A_GuiHeight - 34
   Return
	
Eval() {
	Focus()
   ControlGet, lineNum, CurrentLine, , , ahk_id %hEdit% 
   ControlGet, text, Line, % lineNum, , ahk_id %hEdit% 
   Equal := SubEqual(text, lineNum) 
   try res := doc.parentWindow.math_eval(text)
   catch { 
	  ToolTip(&quot;The expression does not supported&quot;) 
      Return
   }
   If res is space 
   { 
	  ToolTip(&quot;Result empty&quot;) 
      Return
   }
   res := RegExReplace(res, &quot;\.(0+|(0*[^0]+)*\K0+)$&quot;) 
   If !Equal
		SetCarretEnd()
   Control, EditPaste, %  &quot; = &quot; res, , ahk_id %hEdit%
   ToolTip(&quot;Ok&quot;, 300)
   SelResult(res)
}

ButtonCopy() {
	Focus()
	ControlGet, OutputVar, Selected, , , ahk_id %hEdit%
	If OutputVar is not space
		Clipboard := OutputVar, ToolTip(&quot;Ok&quot;)
	Else
		ToolTip(&quot;No Selected&quot;)
}

Focus() {
	GuiControl, Focus, %hEdit%
}

Math:
	ControlGet, OutputVar, Selected, , , ahk_id %hEdit%
	GuiControlGet, Math 
	Focus()
	If Math = ()
	{
		Control, EditPaste, (%OutputVar%), , ahk_id %hEdit%
		Return
	}
	If Math ~= &quot;(*UCP)[[:upper:]]&quot;
	{
		Control, EditPaste, %Math%, , ahk_id %hEdit%
		Return
	}
	Control, EditPaste, %Math%(%OutputVar%), , ahk_id %hEdit%
	
	Sleep 10
	If OutputVar is space
		ControlSend, , {Left}, ahk_id %hEdit%
	Return 

SubEqual(ByRef text, lineNum) {
	If Pos := RegExMatch(text, &quot;\s*=.*&quot;, Match)
	{ 
		SendMessage, EM_LINEINDEX, lineNum - 1, , , ahk_id %hEdit%
		LINEINDEX := Errorlevel - 1
		text := RegExReplace(text, &quot;i)\Q&quot; Match &quot;\E&quot;, &quot;&quot;, , Pos)
		SendMessage, EM_SETSEL, LINEINDEX + Pos, LINEINDEX + Pos + StrLen(Match), , ahk_id %hEdit% 
	}
	Return Pos
}

SetCarretEnd() {
	ControlSend, , {End}, ahk_id %hEdit% 
}

SelResult(res) {
	Static _ := VarSetCapacity(end, 4)
	Sleep 100
	SendMessage, EM_GETSEL, , &amp;end, , ahk_id %hEdit%
	SendMessage, EM_SETSEL, NumGet(end) - StrLen(res), NumGet(end), , ahk_id %hEdit%
}

ToolTip(text, time = 500) {
	CoordMode, Mouse
	CoordMode, ToolTip
	MouseGetPos, X, Y
	ToolTip, %text%, X-10, Y-35, 20
	SetTimer, HideToolTip, -%time%
	Return 1

	HideToolTip:
		ToolTip, , , , 20
		Return
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 03 Mar 2019 09:47:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132697#p132697</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132695#p132695</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Поддерживается js-синтаксис, чтобы посчитать 2 в степени 3, нужно писать Math.pow(2, 3).</p></blockquote></div><p>Можно <em>Math</em> не писать, например так:<br /></p><div class="codebox"><pre><code>doc.write(&quot;&lt;script&gt;with (Math) var math_eval = function (str) {return eval(str);};&lt;/script&gt;&quot;)</code></pre></div><div class="codebox"><pre><code>   try res := doc.parentWindow.math_eval(text)</code></pre></div><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Префикс Math. не нужен.</p></blockquote></div><p>Не совсем: </p><div class="codebox"><pre><code>cos(Math.PI)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sun, 03 Mar 2019 09:24:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132695#p132695</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:Найти калькулятор]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132694#p132694</link>
			<description><![CDATA[<p>Кстати для того что ищет ТС, JS вообще не нужен.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 03 Mar 2019 08:38:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132694#p132694</guid>
		</item>
	</channel>
</rss>
