[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Приветствую господа! aa
Решил себе сделать программу для установки программ с помощью PECMD.
С оформлением все вроде понятно. А вот как заставить работать прогресс бар и как работает чекбокс - не втыкаю.
Я честно пытался разобраться сам, но знаний не хватает.....(вообще не понимаю чего там написано)
Мне бы примеров бы несколько...
Вот что хочется:
.
Но не понимаю как работает команда CHEK и PBAR . То есть, нарисовать то я их нарисовал, а вот как заставить выполнять нужные мне действия не понимаю.
На данный момент как то так себе это все представляю:
CHEK Chk1,L15T40W250H20,7-Zip 19.00,,1
IFEX Chk1 < 0,EXEC --hide --wait 7-Zip-19.00.exe
И догадываюсь что IFEX Chk1 < 0,EXEC --hide --wait 7-Zip-19.00.exe должно быть подпрограммой. А CHEK Chk1,L15T40W250H20,7-Zip 19.00,,1 должно запускать эту подпрограмму?

[Цитировать]

    avalat
  • 222
  • Стаж: 9 лет 2 месяца
  • Сообщений: 450
  • Репутация:127

    [+] [-]
puhpol, aa
попробуй так
_SUB  abc
ifex  $%Chk1.Check%=1,EXEC --hide --wait 7-Zip-19.00.exe
_END
PBAR пока не пробовал как.


Последний раз редактировалось: avalat (2020-01-14 21:45), всего редактировалось 1 раз

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
avalat, Приветствую! aa
Спасибо за участие. az
Мне бы понять.... Допустим:
Есть несколько чек боксов
CHEK Chk1,L15T40W250H20,7-Zip 19.00,,1
CHEK Chk2,L15T60W250H20,SumatraPDF 3.1.2,,0
Есть кнопка СТАРТ
ITEM Button2,L310T200W100H24,Установить,CALL inst,
И есть подпрограмма
_SUB inst
IFEX Chk1 < 0,EXEC --hide --wait 7-Zip-19.00.exe
IFEX Chk2 < 0,EXEC --hide --wait SumatraPDF-3.1.2.00.exe
_END
Я правильно саму идею понял?
Не понял почему так : ifex $%Chk1.Check%=1
"※Используйте "ENVI @ ChkName.Check = Val" для установки статуса флажка,"
Эта хрень на кнопке "снять выбор" у меня стоит:
ITEM Button1,L170T200W100H24,Снять выбор,TEAM ENVI @Chk1.Check=0|ENVI @Chk2.Check=0

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]

Демонстрационный скрипт

CALL MyPBAR `Вызываем окно
_SUB MyPBAR,W320H100%,Progress bar
ITEM -font:14 Btt1,L10T5W210H26,Pres button to demo,CALL Press //Рисуем кнопку, если нажата - вызвать подпрограмму Press
PBAR Pbar1,L10T42W210H26,0 //Указываем размер и имя прогресс-бара
CHEK Chk1,L250T40W50H20,назад,CALC NEnvi=-%NEnvi%, //Рисуем чекбокс, если отмечен - тогда инвертируем %NEnvi%
ENVI @Pbar1=-1 //Задаём начальное значение прогрессбара, при -1 он невидим, при значении 0...100 - видим и отображает значение
ENVI NEnvi=20 //Задаём прирост
_END
_SUB Press
IFEX $%Pbar1%>100, //Если прогрессбар переполнен (больше 100)
{
CALC Pbar1=-1 //Присваиваем значение -1 (невидим)
ENVI @Pbar1=%Pbar1% //Чтобы значение отобразилось сразу же, необходимо привоить то же для @Pbar1
}! //Если прогрессбар не переполнен
{
CALC Pbar1=%Pbar1%+%NEnvi% //Добавляем прирост (зависит от значения чекбокса Chk1)
ENVI @Pbar1=%Pbar1% //Обновляем значение на экране
}
IFEX $%Pbar1%<-1,TEAM CALC Pbar1=100|ENVI @Pbar1=%Pbar1% //Теперь проверка на отрицательные значения, если меньше -1, тогда присвоим 100 и обновим... И обходимся без скобок {}, объеденив две команды с помощью TEAM
_END
Примечание:
ENVI @Pbar1=ХХХ //Сразу применить значение на экране. Т.е., работает так: прогрессбар на экране уже нарисован. И, если мы просто изменим значение Pbar1 на новое, на экране останется старое, нарисованное. А вот @ перед ним указывает, что нужно изменить значение Pbar1 во всех подпрограммах, включая графику.
ENVI @Pbar1.enable=0 //Деактивировать прогрессбар (т.е., он будет видим, но затенён)
ENVI @Pbar1.visable=0 //Скрыть прогрессбар, он станет невидим (конкретно для прогрессбара то же делает ENVI @Pbar1=-1, но visable не изменяет значение Pbar1)
ENVI @Chk1.Check=1 //Установить галочку на чекбокс Chk1
IFEX $%Chk1.Check%=1,MESS Ogogo //Если отмечен чекбокс Chk1, вывести сообщение
Имя.enable, Имя.visable, Имя.Check - работают для большинства экранных рюшек

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
conty9, Приветствую! aa
Спасибо, сейчас буду разбираться.....
Не фига не понял пока, ну да это нормально - я же тугодум. al

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
А CHEK Chk1,L15T40W250H20,7-Zip 19.00,,1 должно запускать эту подпрограмму?
Неверно. Для такого есть обычные кнопки (ITEM). А чекбоксы и радиокнопки предназначены для модификации парамтров запуска, хотя и можно выполнить действия при нажатии/выборе. Радиокнопки - круглые, взаимозависимы в пределах своей группы (т.е., нажав одну, мы гасим остальные). А чекбоксы - квадратные, работают независимо.
На картинке: ".\", "Make bootmgr.ldr", "Edit selected theme", "Make BOOTMGR" - это обычные кнопки, "View" - неактивная кнопка, "Bootmgr 7/8.1/10" - взаимозависимые радиокнопки, "Use XPRESS pack" и "Use selected theme" - независимые чекбоксы.

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
conty9, Не могу понять как мне привязать прогресбар к выполнению команд.....Что бы он показывал что программа устанавливается?
CALL @Windows1
_SUB Windows1,W600H280,Установка программ,,
ENVI @this.Font=12:Tahoma
LABE Label,L40T10W520H20,Выбирете программы для установки ,,0xaaaaaa,16
CHEK Chk8,L300T80W250H20,XnShell,,1
PBAR PBAR1,L50T160W500H20,0  //Указываем размер и имя прогресс-бара
ENVI @Pbar1=-1  //Задаём начальное значение прогрессбара, при -1 он невидим, при значении 0...100 - видим и отображает значение
ENVI NEnvi=20 //Задаём прирост
ITEM Button2,L170T200W100H24,Установить,CALL inst,
_END
_SUB inst
IFEX $%Chk8.Check%=1,EXEC ="%CurDir%\XnShell\XnShellEx.exe" /VERYSILENT
_END

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
puhpol, это вопрос на 100$. ))
Чтобы прогрессбар отображал ход процесса, нужно анализировать выхлоп установки, если он вообще есть. Т.е., например, 7zip при распаковке в консоли показывает прогресс в %. Или wimlib - тоже.
Если XnShellEx.exe тоже показывает, тогда нужно перехватить его сообщения, вычленить оттуда процент прогресса и передать его прогрессбару. Но, скорее всего, всё не так. Тогда останется только возможность организовать постоянно бегущую строку прогресса.
Т.е., присваиваем прогрессу 0, через 300мс примерно (нужно подбирать) - 100, потом снова 0, и т.д. Т.е., наша полоска доползла до конца и снова в 0.

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
conty9, Спасибо, понял.
Ну его в .... этот прогрес бар. ab

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Приветствую господа! aa
Еще пара вопросов теперь по MESS и TEXT:
1. По MESS
Возможен ли вывод окна без кнопок, с блокировкой основного окна при этом с продолжением работы скрипта? И как его (окно) в конце убрать?
2. По TEXT
Возможно ли зациклить выполнение команды?(что бы команда выполнялась по кругу)
Допустим:
TEXT Подождите .
TEXT Подождите ..
TEXT Подождите ...
TEXT Подождите ....
получится типа гифки.
3. До кучи:
IFEX $%Chk8.Check%=1,TEAM TEXT Установка XnShellEx .....| EXEC ="%CurDir%\XnShell\XnShellEx.exe" /VERYSILENT | TEXT
Вроде должно работать?
Добавлено через 2 часа 32 минуты 8 секунд:
А еще :
TIPS или ТEXT можно привязать к основному окну?
Как заблокировать основное окно пока выполняется подпрограмма?

[Цитировать]

    avalat
  • 222
  • Стаж: 9 лет 2 месяца
  • Сообщений: 450
  • Репутация:127

    [+] [-]
puhpol,
По MESS можно сделать как то так
call w1
_SUB w1,W280H150,  без рамки ,,
   ITEM a,L14T74W240H22,тыц,CALL b
_END
_SUB b,W200H98,  123 ,,,#
HKEY z,KILL @b  // гор. клавиша для закрытия окна
LABE L1,L1T1W200H98,\n \n  без рамки ,,#0x00FF00 #0x000000,15
TIME Timer1,5000,KILL @b
_END


Последний раз редактировалось: avalat (2020-01-15 22:07), всего редактировалось 1 раз

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
avalat, Приветствую.
Спасибо. Полезная штука, не понимаю как использовать пока......
Из за компа выгнали. (мой ноут сломался, вот и гоняют по всей квартире). ak

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
73270
73214
Ну его в .... этот прогрес бар. ab
Можно сделать так.
Например, при установке четырёх программ - пбар делим на 4 части, и полоса будет двигаться по мере установки...

код

ENVI pb=CALC Pbar1=%Pbar1%+%b%
ENVI pb1=ENVI @Pbar1=%Pbar1%
ENVI p=CALC n=%n%+1
CALL ww
_sub ww,W410H270,Проба,,
ITEM ss,L300T198W80H25,Старт, CALL st
PBAR PBAR1,L15T160W364H20,,
CHEK ch1,L15T15W70H25, проба1,,
CHEK ch2,L15T40W70H25, проба2,,
CHEK ch3,L15T65W70H25, проба3,,
CHEK ch4,L15T90W70H25, проба4,,
CHEK ch5,L15T115W70H25, проба5,,
LABE -left h1,L15T198W250H50, ,,0x0000FF,16
_end
_SUB st
ENVI n=0
IFEX $%ch1.Check%=1,%p%
IFEX $%ch2.Check%=1,%p%
IFEX $%ch3.Check%=1,%p%
IFEX $%ch4.Check%=1,%p%
IFEX $%ch5.Check%=1,%p%
CALC b=100/%n%
ENVI @Pbar1=0
CALL start
_END
_SUB start
IFEX $%ch1.Check%=1,TEAM ENVI @h1=проба1|MESS Установка |%pb%|%pb1%
IFEX $%ch2.Check%=1,TEAM ENVI @h1=проба2|MESS Установка |%pb%|%pb1%
IFEX $%ch3.Check%=1,TEAM ENVI @h1=проба3|MESS Установка |%pb%|%pb1%
IFEX $%ch4.Check%=1,TEAM ENVI @h1=проба4|MESS Установка |%pb%|%pb1%
IFEX $%ch5.Check%=1,TEAM ENVI @h1=проба5|MESS Установка |%pb%|%pb1%
ENVI @h1=Выполнено
_END
Пока не понял ,как определить количество выбранных чекбоксов.
Сделал примитивно (подпрограмма st), но чую, можно по другому...
73273puhpol, aa
Попробуй подставь вместо "MESS Установка" - "EXEC=................своё"
Получится или нет !?
Добавлено через 2 минуты 17 секунд:
avalat, Извиняюсь, но на данный момент пауза.
Нужно что то с сервером делать.

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
К каждой программе привязать значение прогресбара, закончилось выполнение команды прогрес бар продвинулся на 1 деление, выполнение всех команд - 100% прогресбара.
Тогда проблем нет. При запуске установки присваиваем начальное значение прогресса 20%, после выполнения первой ехе-шки (EXEC ="%CurDir%\XnShell\XnShellEx.exe" /VERYSILENT) назначаем 40%, после второй - 60%... после последней - 100%.

[Цитировать]

    avalat
  • 222
  • Стаж: 9 лет 2 месяца
  • Сообщений: 450
  • Репутация:127

    [+] [-]
Выделить/убрать галки со всех чекбоксов.
Можно ли как-то по другому ?
_SUB ins
forx* 1 2 3 4 5,d,envi @ch%d%.Check=1    //или 0
_end
И всё же как подсчитать количество выбранных ?

Страница 1 из 2


Показать сообщения:    

Текущее время: 28-Мар 21:58

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы