Тема: AHK: Оптимизация готового скрипта
Добрый день.
Есть готовый скрипт. Работает как задумано, расположение всяческих кнопок\полей задано (разве только с положением текста разобраться до конца не удалось).
menu, tray, add,
menu, tray, add, Закрыть &(F4), l
menu, tray, add, Свернуть &в &трей &(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:="%"
Menu, j, Add, Свернуть &в &трей &(F7), d
Menu, j, Add, Закрыть &(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<=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>1) and (y<31)
{
if (b="Без множителя")
m:=1
if (b="+50%")
m:=1.5
if (b="+100%")
m:=2
if (b="+150%")
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="Без множителя")
MsgBox, 0, Значение = %x%, Нижнее значение = %y%, их отношение без множителя = %i%,%a%.
if (b="+50%")
MsgBox, 0, Подсчёт, Нижнее значение = %y%, их отношение с первым множителем = %i%,%a%.
if (b="+100%")
MsgBox, 0, Подсчёт, Нижнее значение = %y%, их отношение со вторым множителем = %i%,%a%.
if (b="+150%")
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, Свернуть &в &трей &(F7), d
menu, tray, delete, Свернуть &в &трей &(F7)
MsgBox, 0, Подсчёт, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт "Восстановить" в меню иконки.
menu, tray, add, Восстановить &(F3), r
sleep, 500
return
ButtonПосчитать:
Gui, Submit
gui, destroy
m:=1.0
Gui, Add, Text,, Значение = %O%,
gosub, t
if (i < 31) {
Gui, Add, Text, x+5,расчёт с массивом = %i% целых %a% сотых.
}
Gui, Add, Text, xm section, Значение = %O%, при первом множителе (+50%m%)
m:=1.5
gosub, t
if (i < 31) {
Gui, Add, Text, x+5,расчёт с массивом = %i% целых %a% сотых.
}
Gui, Add, Text, xm section, Значение = %O%, при втором множителе (+100%m%)
m:=2.0
gosub, t
if (i < 31) {
Gui, Add, Text, x+5,расчёт с массивом = %i% целых %a% сотых.
}
Gui, Add, Text, xm section, Значение = %O% , при третьем множителе(+150%m%)
m:=2.5
gosub, t
if (i < 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 >= 0)
{
i:=i-1
a:=ceil((O-a)/(u*m-a)*100)
m:="%"
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:="%"
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, Восстановить &(F3), r
menu, tray, delete, Восстановить &(F3)
menu, tray, add, Свернуть &в &трей &(F7), d
goto, b ; запуск скрипта на F3
f7::
gui, destroy
sleep, 10
menu, tray, add, Свернуть &в &трей &(F7), d
menu, tray, delete, Свернуть &в &трей &(F7)
MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт "Восстановить" в меню иконки.
menu, tray, add, Восстановить &(F3), r
sleep, 300
return
r:
menu, tray, delete, Восстановить &(F3)
menu, tray, add, Свернуть &в &трей &(F7), d
goto, b
d:
gui, destroy
sleep, 10
menu, tray, delete, Свернуть &в &трей &(F7)
MsgBox, 0, Подсчёт уровня, Приложение свёрнуто в трее. Для использования достаточно нажать клавишу F3 или выбрать пункт "Восстановить" в меню иконки.
menu, tray, add, Восстановить &(F3), r
sleep, 300
return
l:
exitapp
f4:: ExitApp ; закрытие скрипта на F4Хотелось бы теперь получить помощь в вынесении мусора из тела программы. Сделать скрипт более лаконичным, грамотно привести в порядок. Например, как-нибудь превратить десять строк кода в две, сохраняя их функционал или сократить количество задействованных переменных. Моих начальных знаний для этого не хватило.
Скриптом занимаюсь на работе и больше по памяти (доступ в интернет принципиально использую только в рамках рабочих функций), а дома на него времени просто нет.
Заодно хотелось бы уточнить вот такой момент: при активации скрипта в трее автоматически появляется его иконка и во встроенном меню у него есть пункты "Suspend Hotkeys", "Pause Script" и "Exit". Можно ли их как-нибудь оттуда убрать\спрятать? Если нет, то можно ли хотя бы поместить мои пункты меню выше этих?
Буду рад любым подсказкам и советам.
Большое спасибо.

