@bartbtc said in Лайфхаки BAS:
@fox
@fox said in Лайфхаки BAS:
С глобальными переменными (или объектом в глобальной переменной) можно установить прогресс бар на несколько потоков:
Этот прогресс бар
Вот вариант с костылями скрипт.xml (с обычными глобальными переменными и обычными условиями)
А для варианта без костылей немного подправил функцию:
progressbar = function (val, max) {
var SettingsProgressbar = JSON.parse(P("basglobal", "SETTINGSPROGRESSBAR")) //прочитали настройки из глобальной переменной
if (!SettingsProgressbar[(thread_number() - 1)]) SettingsProgressbar[(thread_number() - 1)] = {}
SettingsProgressbar[(thread_number() - 1)].val = val
SettingsProgressbar[(thread_number() - 1)].max = max
PSet("basglobal", "SETTINGSPROGRESSBAR", (JSON.stringify(SettingsProgressbar))) //обновили настройки
for (var i = 0; i <= SettingsProgressbar.length - 1; i++) { //проходим циклом все объявленные статус бары
if (SettingsProgressbar[i]) { //если статусбар данного потока существует
var res = parseInt(SettingsProgressbar[i].val * 1000 / SettingsProgressbar[i].max)
if (SettingsProgressbar[i].val == 0) log_html('<table style="border-color:#000000" width="1000" cellspacing="0" cellpadding="4" border="0"><tr><td bgcolor="#F0FFF0"</td></tr></table>')
if (SettingsProgressbar[i].val >= SettingsProgressbar[i].max) log_html('<table style="border-color:#000000" width="1000" cellspacing="0" cellpadding="4" border="0"><tr><td bgcolor="' + SettingsProgressbar[i].color + '"</td></tr></table>')
if (SettingsProgressbar[i].val != 0 && SettingsProgressbar[i].val < SettingsProgressbar[i].max) log_html('<table style="border-color:#000000" width="1000" cellspacing="0" cellpadding="4" border="0"><tr><td bgcolor="' + SettingsProgressbar[i].color + '" width="' + res + '"></td><td bgcolor="#F0FFF0" ></td></tr></table>')
log_html(" ")
}
}
}
Убрал определение цвета внутри потока (это не удобно, так как придётся создавать в скрипте кучу условий).
Вместо этого вынес определение цветов для всех статусбаров в глобальный массив объектов SETTINGSPROGRESSBAR, который объявляется в функции OnApplicationStart и там же заполняет цвета для всех статусбаров из массива [[NEW_LIST]]


в самой функции добавил цикл отрисовки с условием, на случай если ещё не все потоки начали работу:

Тестовый скрипт