<?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=12048</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12048&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Оптимизация готового скрипта».]]></description>
		<lastBuildDate>Sun, 02 Oct 2016 20:50:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108160#p108160</link>
			<description><![CDATA[<div class="codebox"><pre><code>
2ButtonГотово:
</code></pre></div><p><a href="http://www.script-coding.com/AutoHotkey/GUIControls.html#button">Button(Кнопка)</a> - предпоследний абзац в разделе.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sun, 02 Oct 2016 20:50:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108160#p108160</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108155#p108155</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Любой алгоритм можно описать в теле циклов без использования &quot;GoTo&quot;, да и выглядеть он будет куда нагляднее.</p></blockquote></div><p>Мне-то совершенно не жалко, но самому пока не по силам так код поправить, чтобы и метки не задействовать, и функционал не утратить.</p><p>И я всё ещё не могу разобраться с указанными выше тремя пунктами.<br />Разве только я понял как объединить блок горячей клавиши и кнопки, но прибавить к ним ещё и блок аналогичного пункта меню пока не вышло.</p><p>По мультиокну пробовал:<br /></p><div class="codebox"><pre><code>ButtonПосчитать:
Gui, Submit
mnojitel:=1
Gui, 2:Add, Text,, Значение = %Znach%,
gosub, podchet

if (koef &lt; 31) 	{
		Gui, 2:Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, 2:Add, Text, xm section, Значение = %Znach%, при первом множителе (+50`%)
mnojitel:=1.5
gosub, podchet

if (koef &lt; 31) 	{
		Gui, 2:Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, 2:Add, Text, xm section, Значение = %Znach%, при втором множителе (+100`%)
mnojitel:=2
gosub, podchet

if (koef &lt; 31) 	{
		Gui, 2:Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, 2:Add, Text, xm section, Значение = %Znach% , при третьем множителе (+150`%)
mnojitel:=2.5
gosub, podchet

if (koef &lt; 31) 	{
		Gui, 2:Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, 2:Add, Button, x280 default, Готово
sleep, 50
Gui, 2:Show, , Подсчёт
return

Button2:Готово: 			; здесь пробовал разные вариации
goto, finish</code></pre></div><p>Но на нажатие кнопки &quot;Готово&quot; никакой реакции добиться не получалось.</p>]]></description>
			<author><![CDATA[null@example.com (Oomniq)]]></author>
			<pubDate>Sun, 02 Oct 2016 14:15:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108155#p108155</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108144#p108144</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?id=10655">В чем &quot;злость&quot; Goto?</a></p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sun, 02 Oct 2016 05:56:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108144#p108144</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108139#p108139</link>
			<description><![CDATA[<div class="quotebox"><cite>Oomniq пишет:</cite><blockquote><p>Это было сделано нарочно. Меньше длина переменной - меньше переменная отбирает ресурса. Поправил.</p></blockquote></div><p>Здравствуйте.<br />Длина имени переменной увеличивает длину файла, текст которого Вы набираете на 1 байт за каждый символ, но на способности и скорости работы это никак не сказывается.</p><p>Для организации кода можно использовать <a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BA%D0%BE%D0%B4_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2)">псевдокод</a>, позволяющий самостоятельно смотреть на конструируемый объект больше с понятной, человеческой позиции, используя в его описании привычную терминологию. Потом, когда картина становится понятна, или достаточно проработаны нужные детали это просто переносится в код выполняемого сценария.</p><p>Так же, есть довольно популярное <a href="https://ru.wikipedia.org/wiki/Goto#.D0.9A.D1.80.D0.B8.D1.82.D0.B8.D0.BA.D0.B0">мнение</a>, в <a href="http://compiler.su/nekoshernyj-goto.php">некоторых выводах</a> которого оператор &quot;GoTo&quot; выглядит как рудимент. Безусловно, метка перехода удобна, но если Вы пишете серьёзный проект, то&nbsp; проблемы связанные именно с этой частностью могут стать неизбежными. Любой алгоритм можно описать в теле циклов без использования &quot;GoTo&quot;, да и выглядеть он будет куда нагляднее.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sat, 01 Oct 2016 17:22:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108139#p108139</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108106#p108106</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Имена процедур должны говорить о том, что делает их код.</p></blockquote></div><p>Это было сделано нарочно. Меньше длина переменной - меньше переменная отбирает ресурса. Поправил.</p><div class="codebox"><pre><code>menu, tray, nostandard
menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), killthemall
menu, tray, add, Закрыть &amp;(F4), awayfromhere

massiv := [0, 1568, 3799, 6257, 7947, 10506, 14507, 16988, 20407, 24597, 26872, 31439, 35598, 39564, 45001, 50123, 54528, 60462, 65444, 72951, 79986, 89565, 103657, 114284, 129144, 146855, 167053, 189564, 214481, 240477]

begin:

Menu, mainmenu, Add, Свернуть &amp;в &amp;трей &amp;(F7), killthemall
Menu, mainmenu, Add, Закрыть &amp;(F4), awayfromhere
Menu, allmenu, Add, Действия, :mainmenu
Gui, Menu, allmenu
Gui, Add, Tab2, w177 h20,Подсчёты|Расчёты|Таблица
Gui, Add, Text, x65 y126, Значение:
Gui, Add, Edit, number x+15 section w150 vZnach, 1
gui, font, s10,
Gui, Add, Button, x165 y+15 h30 w80 default, Посчитать
gui, font,, 
Gui, Add, Text, x30 center y+30 w350, Здесь располагается текст. Инструкция и советы по применению скрипта. Нечто вроде навигации по вкладкам.
Gui, Add, Button, x17 y326, Свернуть в трей (F7)
Gui, Add, Button, x+140 w110, Закрыть (F4)
Gui, Tab, 2
Gui, Add, Edit, number x35 y+11 w110 vVerhorniz, 1
Gui, Add, Radio, x+20 Checked vOneRadio, Задать верхнее значение`n(всегда расчитывается без множителя)
Gui, Add, Radio, y+5, Задать нижнее значение
Gui, Add, Text, w1 x10 y+10, 
Gui, Add, DropDownList, x+186 w120 vOneDropList, Без множителя||+50`%|+100`%|+150`%
Gui, Add, Text, x65 y126, Значение:
Gui, Add, Edit, number x+15 section w150 vChislo, 1
gui, font, s10,
Gui, Add, Button, x165 y+15 h30 w80, Вычислить
gui, font,,
Gui, Add, Text, x30 y+30 center w350, Здесь располагается другой текст. Инструкция и советы по применению скрипта. Нечто вроде навигации по вкладкам. В том числе, пояснение по функциям второй вкладки. X-положение приходится вычислять на глаз.
Gui, Add, Button, x17 y326, Свернуть в трей (F7)
Gui, Add, Button, x+140  w110, Закрыть (F4)
Gui, Tab, 3
Gui, Add, Text, h17 x80 y+5, Без множителя
Gui, Add, Text, h17 x+15, (+50`%)
Gui, Add, Text, h17 x+45, (+100`%)
Gui, Add, Text, h17 x+45, (+150`%)
gosub, writetable						; расчёт таблицы и запись её в третьей вкладке
Gui, Show, w400, Подсчёт
return

ButtonВычислить:
Gui, Submit
sleep, 50
if (OneRadio=1)							; работа с верхним значением
{
if (Chislo&lt;=Verhorniz)
MsgBox, 0, Подсчёт, Значение %Chislo% меньше или равно верхнему значению %Verhorniz%.
	else
	{
	nomer:=ceil(Chislo/Verhorniz)				; отделение целой части отношения значения пользователя к верхнему значению через округление в большую сторону
	nomer:=nomer-1
	buffer:=ceil((Chislo/Verhorniz-nomer)*100)		; отделение сотых единиц
	if (buffer=100) 
		{
		buffer:=0
		nomer:=nomer+1
		}
	sleep, 50
	MsgBox, 0, Подсчёт, Значение = %Chislo%, верхнее значение = %Verhorniz%, их отношение = %nomer%,%buffer%.
	}
}
if (OneRadio=2)
{
if (Verhorniz&gt;1) and (Verhorniz&lt;31)				; работа с нижним значением (порядковым номером элемента массива)
	{
	if (OneDropList=&quot;Без множителя&quot;)
	mnojitel:=1
	if (OneDropList=&quot;+50%&quot;)
	mnojitel:=1.5
	if (OneDropList=&quot;+100%&quot;)
	mnojitel:=2
	if (OneDropList=&quot;+150%&quot;)
	mnojitel:=2.5
	nomer:=ceil(Chislo/mnojitel/massiv[Verhorniz])		; отделение целой части отношения значения пользователя к элементу массива
	nomer:=nomer-1
	buffer:=ceil((Chislo/mnojitel/massiv[Verhorniz]-nomer)*100)	; отделение сотых единиц
	if (buffer=100) 
		{
		buffer:=0
		nomer:=nomer+1
		}
	sleep, 50
	if (OneDropList=&quot;Без множителя&quot;)
	MsgBox, 0, Подсчёт, Значение = %Chislo%, нижнее значение = %Verhorniz%, их отношение без множителя = %nomer%,%buffer%.
	if (OneDropList=&quot;+50%&quot;)
	MsgBox, 0, Подсчёт, Значение = %Chislo%, нижнее значение = %Verhorniz%, их отношение с первым множителем = %nomer%,%buffer%.
	if (OneDropList=&quot;+100%&quot;)
	MsgBox, 0, Подсчёт, Значение = %Chislo%, нижнее значение = %Verhorniz%, их отношение со вторым множителем = %nomer%,%buffer%.
	if (OneDropList=&quot;+150%&quot;)
	MsgBox, 0, Подсчёт, Значение = %Chislo%, нижнее значение = %Verhorniz%, их отношение с третьим множителем = %nomer%,%buffer%.
	}
	else
		{
		sleep, 50
		if (Verhorniz=1)
 		MsgBox, 0, Подсчёт, Разумному пользователю ни к чему указывать единицу для этого расчёта. Первый элемент массива равен нулю. К чему допускать деление на ноль?
		else
		MsgBox, 0, Подсчёт, Доступны только значения от 1 до 30. Можно было бы указать, что с двойки, но не хочется акцентировать на ней (двойке) внимание.
		}
}
goto, finish

ButtonПосчитать:
Gui, Submit
gui, destroy
mnojitel:=1
Gui, Add, Text,, Значение = %Znach%,
gosub, podchet

if (koef &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, Add, Text, xm section, Значение = %Znach%, при первом множителе (+50`%)
mnojitel:=1.5
gosub, podchet

if (koef &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, Add, Text, xm section, Значение = %Znach%, при втором множителе (+100`%)
mnojitel:=2
gosub, podchet

if (koef &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, Add, Text, xm section, Значение = %Znach% , при третьем множителе (+150`%)
mnojitel:=2.5
gosub, podchet

if (koef &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %nomer% целых %buffer% сотых.
		}
Gui, Add, Button, x280 default, Готово
sleep, 50
Gui, Show, , Подсчёт
return

ButtonГотово:
goto, finish

podchet:							; просмотр массива и сверка с указанным числом
for nomer, elem in massiv
{
if (elem*mnojitel-Znach &gt;= 0)					; если текущий элемент массива больше указанного пользователем значения
	{
	nomer:=nomer-1
	buffer:=ceil((Znach-buffer)/(elem*mnojitel-buffer)*100) ; буферная переменная=первые два знака после запятой от деления разницы значения пользователя и предыдущего элемента массива на разницу текущего и предыдущего элементов массива
	if (buffer=100) 
		{
		buffer:=0
		nomer:=nomer+1
		}
	return
	}
if (nomer = 30) 
	gosub, overlimit
buffer:=elem*mnojitel						; присвоение буферной переменной значения текущего элемента массива
}
return

overlimit:
Gui, Add, Text, x+5,Требуется больше %koef%-ти элементов массива. Выход за пределы.
nomer:=31
return

writetable:							; заполнение таблицы для третьей вкладки
for nomer, elem in massiv
	{
	mnojitel:=1
	buffer:=ceil(elem*mnojitel)
	Gui, Add, Text, w70 x10 y+5,Номер %nomer%
	Gui, Add, Text, w70 x+18,%buffer%
		loop, 3
			{
			mnojitel:=mnojitel+0.5
			buffer:=ceil(elem*mnojitel)
			Gui, Add, Text, w70 x+10,%buffer%
			}
	}
sleep, 150
return

ButtonСвернутьвтрей(f7):
gui, destroy
sleep, 10
menu, tray, deleteall
MsgBox, 0, Подсчёт, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
menu, tray, add, Восстановить &amp;(F3), zanovo
menu, tray, add, Закрыть &amp;(F4), awayfromhere
sleep, 500
return

finish:
sleep, 50
gui, destroy
sleep, 50
goto, begin

f3::
	gui, destroy
	menu, tray, deleteall
	menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), killthemall
	menu, tray, add, Закрыть &amp;(F4), awayfromhere
	goto, begin ; запуск скрипта на F3

f7:: 
	gui, destroy
	sleep, 10
	menu, tray, deleteall
	MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
	menu, tray, add, Восстановить &amp;(F3), zanovo
	menu, tray, add, Закрыть &amp;(F4), awayfromhere
	sleep, 300
	return

zanovo:
menu, tray, deleteall
menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), killthemall
menu, tray, add, Закрыть &amp;(F4), awayfromhere
goto, begin

killthemall:
	gui, destroy
	sleep, 10
	menu, tray, deleteall
	MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
	menu, tray, add, Восстановить &amp;(F3), zanovo
	menu, tray, add, Закрыть &amp;(F4), awayfromhere
	sleep, 300
	return

GuiClose:
exitapp

ButtonЗакрыть(f4):
exitapp

awayfromhere:
exitapp

f4:: ExitApp ; закрытие скрипта на F4</code></pre></div><p>По мне тут мусора ещё многовато... Ладно, по порядку и конкретнее:<br />1) Подскажите, пожалуйста, как организовать работу скрипта в мультиоконном режиме? То есть, у меня по нажатию кнопки &quot;Посчитать&quot; в первой вкладке раньше появлялось второе окошко с результатом и кнопкой &quot;Готово&quot;, но скрипт не реагировал на нажатие этой кнопки. Поэтому теперь после нажатия кнопки &quot;Посчитать&quot; и всех расчётов весь gui рисуется каждый раз заново.<br />1.1) Связано с передыдущим пунктом. Нажатие на кнопку &quot;Вычислить&quot; во второй вкладке даёт команду программе произвести подсчёты, выдать результат и перерисовать gui заново (делая активной первую вкладку), вместо того чтобы по закрытию окошка с результатом вернуть окно интерфейса с активной второй вкладкой.<br />2) Как прописать функции для клавиш (F3, F4 и F7) соответственно тем функциям и кнопкам (&quot;Восстановить&quot;, &quot;Закрыть&quot; и &quot;Свернуть в трей&quot;) за которые они отвечают? Приходится дублировать описание одних и тех же действий. Как-то объединить, например,</p><div class="codebox"><pre><code>f7:: 
	gui, destroy
	sleep, 10
	menu, tray, deleteall
	MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
	menu, tray, add, Восстановить &amp;(F3), zanovo
	menu, tray, add, Закрыть &amp;(F4), awayfromhere
	sleep, 300
	return</code></pre></div><p>и</p><div class="codebox"><pre><code>killthemall:
	gui, destroy
	sleep, 10
	menu, tray, deleteall
	MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
	menu, tray, add, Восстановить &amp;(F3), zanovo
	menu, tray, add, Закрыть &amp;(F4), awayfromhere
	sleep, 300
	return</code></pre></div><p>Это делается как-то через hotkey? По идее, так оно было бы правильнее, но эта часть мне не очень далась. Главная проблема в том, что если я &quot;сверну&quot; приложение на кнопку в&nbsp; интерфейсе, то не закрывая окошко выскакивающего сообщения я могу &quot;свернуть ещё раз&quot; уже свёрнутое приложение, что вызовёт ещё одно окошко. Путём нехитрых манипуляций я могу накопить порядка шести таких окошек, а мне вовсе не нужно, чтобы скрипт реагировал на клавишу F3 когда приложение активно и на клавишу F7 когда оно &quot;свёрнуто&quot;.<br />3) При задействовании клавиш F3 и F7 либо соответствующих кнопок интерфейса, либо через соответствующее меню, скрипт вынужден каждый раз удалять из трея все меню и выставлять определённые обратно. Как устроить, чтобы он удалял строго определённые меню только если они там есть. Как написать &quot;if такая-то менюшка есть - delete её&quot;? Нужно как-то применить UseErrorLevel? Если просто указать ему удалить такую-то менюшку из трея, а её там не окажется - он выдаёт ошибку.</p><p>Это что я хотел бы поправить в коде на данном этапе. Спасибо за помощь.</p>]]></description>
			<author><![CDATA[null@example.com (Oomniq)]]></author>
			<pubDate>Thu, 29 Sep 2016 15:51:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108106#p108106</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108100#p108100</link>
			<description><![CDATA[<div class="codebox"><pre><code>
gosub, a
goto, f
</code></pre></div><p>Вот при виде этого хочется ругнуться. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Имена процедур должны говорить о том, что делает их код. А такие буковки вылавливать в коде и соображать, что они обозначают, не сильно охота.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 29 Sep 2016 03:35:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108100#p108100</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108098#p108098</link>
			<description><![CDATA[<p>Код оформлен правильно. Отступы и комментарии есть. Мусора нет. Когда Вы посмотрите на него через много лет, то поймёте порядок работы. <br />В нынешнем виде - это лучший вариант для просмотра в Блокноте. Если хочется отдельные подпрограммы, функции и т. п. убрать под спойлер, используйте специальные редакторы для скриптов: <a href="http://forum.script-coding.com/viewtopic.php?id=8342">AHK: Удобный редактор / среда для AHK</a>.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Wed, 28 Sep 2016 20:40:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108098#p108098</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108097#p108097</link>
			<description><![CDATA[<p><strong>ypppu</strong><br /></p><div class="quotebox"><blockquote><p>А смысл? Вы же не будете код скрипта вешать на доску почёта?</p></blockquote></div><p>Мы-то&nbsp; не будем, но грамотно оформлять свои работы полезно с первых шагов. А может и будем - кто нас знает?</p>]]></description>
			<author><![CDATA[null@example.com (Oomniq)]]></author>
			<pubDate>Wed, 28 Sep 2016 20:04:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108097#p108097</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108089#p108089</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Хотелось бы теперь получить помощь в вынесении мусора из тела программы.</p></blockquote></div><p>А смысл? Вы же не будете код скрипта вешать на доску почёта?</p><div class="quotebox"><blockquote><p>... пункты &quot;Suspend Hotkeys&quot;, &quot;Pause Script&quot; и &quot;Exit&quot;. Можно ли их как-нибудь оттуда убрать\спрятать?</p></blockquote></div><p>Можно, для этого есть команда <em>Menu,Tray</em>.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Wed, 28 Sep 2016 16:58:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108089#p108089</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Оптимизация готового скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108082#p108082</link>
			<description><![CDATA[<p>Добрый день.<br />Есть готовый скрипт. Работает как задумано, расположение всяческих кнопок\полей задано (разве только с положением текста разобраться до конца не удалось).</p><div class="codebox"><pre><code>menu, tray, add,
menu, tray, add, Закрыть &amp;(F4), l
menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), d

g := [0, 1568, 3799, 6257, 7947, 10506, 14507, 16988, 20407, 24597, 26872, 31439, 35598, 39564, 45001, 50123, 54528, 60462, 65444, 72951, 79986, 89565, 103657, 114284, 129144, 146855, 167053, 189564, 214481, 240477]

b:

m:=&quot;%&quot;
Menu, j, Add, Свернуть &amp;в &amp;трей &amp;(F7), d
Menu, j, Add, Закрыть &amp;(F4), l
Menu, h, Add, Действия, :j
Gui, Menu, h
Gui, Add, Tab2, w177 h20,Подсчёты|Расчёты|Таблица
Gui, Add, Text, x65 y+98, Значение:
Gui, Add, Edit, number x+15 section w150 vo, 1
gui, font, s10,
Gui, Add, Button, x165 y+15 h30 w80 default, Посчитать
gui, font,,
Gui, Add, Text, x50 y+30 section, Здесь располагается текст.
Gui, Add, Text, x25 y+5, Инструкция и советы по применению скрипта.
Gui, Add, Text, x60 y+5 section, Нечто вроде навигации по вкладкам.
Gui, Add, Button, x25 y+66, Свернуть в трей (F7)
Gui, Add, Button, x+170, Закрыть (F4)
Gui, Tab, 2
Gui, Add, Edit, number x35 y+11 section w110 vy, 1
Gui, Add, Radio, x+20 Checked vz, Задать верхнее значение`n(всегда расчитывается без множителя)
Gui, Add, Radio, y+5, Задать нижнее значение
Gui, Add, Text, w1 x10 y+10, 
Gui, Add, DropDownList, x+226 w120 vb, Без множителя||+50%m%|+100%m%|+150%m%
Gui, Add, Text, x65 y+12, Значение:
Gui, Add, Edit, number x+15 section w150 vx, 1
gui, font, s10,
Gui, Add, Button, x165 y+15 h30 w80, Вычислить
gui, font,,
Gui, Add, Text, x50 y+30 section, Здесь располагается другой текст.
Gui, Add, Text, x45 y+5, Инструкция и советы по применению скрипта.
Gui, Add, Text, x35 y+5, Нечто вроде навигации по вкладкам.
Gui, Add, Text, x45 y+5, В том числе, пояснение по функциям второй вкладки.
Gui, Add, Text, x126 y+5 section, Центрировать постоянно приходится вручную.
Gui, Add, Button, x25 y+30, Свернуть в трей (F7)
Gui, Add, Button, x+170, Закрыть (F4)
Gui, Tab, 3
Gui, Add, Text, h17 x80 y+5, Без множителя
Gui, Add, Text, h17 x+15, (+50%m%)
Gui, Add, Text, h17 x+45, (+100%m%)
Gui, Add, Text, h17 x+45, (+150%m%)
gosub, a
Gui, Show, , Подсчёт
return

GuiClose:
exitapp

ButtonЗакрыть(f4):
exitapp

ButtonВычислить:
Gui, Submit
sleep, 50
if (z=1)
{
if (x&lt;=y)
MsgBox, 0, Подсчёт, Значение %x% меньше или равно верхнему значению %y%.
	else
	{
	i:=ceil(x/y)
	i:=i-1
	a:=ceil((x/y-i)*100)
	if (a=100) 
		{
		a:=0
		i:=i+1
		}
	sleep, 50
	MsgBox, 0, Значение = %x%, верхнее значение = %y%, их отношение = %i%,%a%.
	}
}
if (z=2)
{
if (y&gt;1) and (y&lt;31)
	{
	if (b=&quot;Без множителя&quot;)
	m:=1
	if (b=&quot;+50%&quot;)
	m:=1.5
	if (b=&quot;+100%&quot;)
	m:=2
	if (b=&quot;+150%&quot;)
	m:=2.5
	i:=ceil(x/m/g[y])
	i:=i-1
	a:=ceil((x/m/g[y]-i)*100)
	if (a=100) 
		{
		a:=0
		i:=i+1
		}
	sleep, 50
	if (b=&quot;Без множителя&quot;)
	MsgBox, 0, Значение = %x%, Нижнее значение = %y%, их отношение без множителя = %i%,%a%.
	if (b=&quot;+50%&quot;)
	MsgBox, 0, Подсчёт, Нижнее значение = %y%, их отношение с первым множителем = %i%,%a%.
	if (b=&quot;+100%&quot;)
	MsgBox, 0, Подсчёт, Нижнее значение = %y%, их отношение со вторым множителем = %i%,%a%.
	if (b=&quot;+150%&quot;)
	MsgBox, 0, Подсчёт, Нижнее значение = %y%, их отношение с третьим множителем = %i%,%a%.
	}
	else
		{
		sleep, 50
		if (y=1)
 		MsgBox, 0, Подсчёт, Разумному пользователю ни к чему указывать единицу для этого расчёта. Первый элемент массива равен нулю. К чему допускать деление на ноль?
		else
		MsgBox, 0, Подсчёт, Доступны только значения от 1 до 30. Можно было бы указать, что с двойки, но не хочется акцентировать на ней (двойке) внимание.
		}
}
goto, f

ButtonСвернутьвтрей(f7):
gui, destroy
sleep, 10
menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), d
menu, tray, delete, Свернуть &amp;в &amp;трей &amp;(F7)
MsgBox, 0, Подсчёт, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
menu, tray, add, Восстановить &amp;(F3), r
sleep, 500
return

ButtonПосчитать:
Gui, Submit
gui, destroy
m:=1.0
Gui, Add, Text,, Значение = %O%,
gosub, t

if (i &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %i% целых %a% сотых.
		}
Gui, Add, Text, xm section, Значение = %O%, при первом множителе (+50%m%)
m:=1.5
gosub, t

if (i &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %i% целых %a% сотых.
		}
Gui, Add, Text, xm section, Значение = %O%, при втором множителе (+100%m%)
m:=2.0
gosub, t

if (i &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %i% целых %a% сотых.
		}
Gui, Add, Text, xm section, Значение = %O% , при третьем множителе(+150%m%)
m:=2.5
gosub, t

if (i &lt; 31) 	{
		Gui, Add, Text, x+5,расчёт с массивом = %i% целых %a% сотых.
		}
Gui, Add, Button, x280 default, Готово
sleep, 50
Gui, Show, , Подсчёт
return

ButtonГотово:
goto, f

t:
for i, u in g
{
if (u*m-O &gt;= 0)
	{
	i:=i-1
	a:=ceil((O-a)/(u*m-a)*100)
	m:=&quot;%&quot;
	if (a=100) 
		{
		a:=0
		i:=i+1
		}
	return
	}
if (i = 30) 
	gosub, n
a:=u*m
}
return

n:
Gui, Add, Text, x+5,Требуется больше %i%-ти элементов массива. Выход за пределы.
i:=31
m:=&quot;%&quot;
return

a:
for i, u in g
	{
	m:=1
	a:=ceil(u*m)
	Gui, Add, Text, w70 x10 y+5,Номер %i%
	Gui, Add, Text, w70 x+18,%a%
		loop, 3
			{
			m:=m+0.5
			a:=ceil(u*m)
			Gui, Add, Text, w70 x+10,%a%
			}
	}
sleep, 150
return

f:
sleep, 50
gui, destroy
sleep, 50
goto, b

f3::
	gui, destroy
	menu, tray, add, Восстановить &amp;(F3), r
	menu, tray, delete, Восстановить &amp;(F3)
	menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), d
	goto, b ; запуск скрипта на F3

f7:: 
	gui, destroy
	sleep, 10
	menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), d
	menu, tray, delete, Свернуть &amp;в &amp;трей &amp;(F7)
	MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
	menu, tray, add, Восстановить &amp;(F3), r
	sleep, 300
	return

r:
menu, tray, delete, Восстановить &amp;(F3)
menu, tray, add, Свернуть &amp;в &amp;трей &amp;(F7), d
goto, b

d:
gui, destroy
	sleep, 10
	menu, tray, delete, Свернуть &amp;в &amp;трей &amp;(F7)
	MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт &quot;Восстановить&quot; в меню иконки.
	menu, tray, add, Восстановить &amp;(F3), r
	sleep, 300
	return

l:
exitapp

f4:: ExitApp ; закрытие скрипта на F4</code></pre></div><p>Хотелось бы теперь получить помощь в вынесении мусора из тела программы. Сделать скрипт более лаконичным, грамотно привести в порядок. Например, как-нибудь превратить десять строк кода в две, сохраняя их функционал или сократить количество задействованных переменных. Моих начальных знаний для этого не хватило.<br />Скриптом занимаюсь на работе и больше по памяти (доступ в интернет принципиально использую только в рамках рабочих функций), а дома на него времени просто нет.</p><p>Заодно хотелось бы уточнить вот такой момент: при активации скрипта в трее автоматически появляется его иконка и во встроенном меню у него есть пункты &quot;Suspend Hotkeys&quot;, &quot;Pause Script&quot; и &quot;Exit&quot;. Можно ли их как-нибудь оттуда убрать\спрятать? Если нет, то можно ли хотя бы поместить мои пункты меню выше этих?</p><p>Буду рад любым подсказкам и советам.<br />Большое спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Oomniq)]]></author>
			<pubDate>Wed, 28 Sep 2016 16:08:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108082#p108082</guid>
		</item>
	</channel>
</rss>
