[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

    [+] [-]
Приветствую господа! 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 должно запускать эту подпрограмму?

[Quote]

    avalat
  • 222
  • Longevity: 10 years
  • Posts: 496
  • REPUTATION:127

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


Last edited by avalat on 2020-01-14 21:45; edited 1 time in total

[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

    [+] [-]
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

[Quote]

    Guest
  • REPUTATION: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 - работают для большинства экранных рюшек

[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

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

[Quote]

    Guest
  • REPUTATION: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" - независимые чекбоксы.

[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

    [+] [-]
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

[Quote]

    Guest
  • REPUTATION:0

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

[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

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

[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

    [+] [-]
Приветствую господа! 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 можно привязать к основному окну?
Как заблокировать основное окно пока выполняется подпрограмма?

[Quote]

    avalat
  • 222
  • Longevity: 10 years
  • Posts: 496
  • REPUTATION: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


Last edited by avalat on 2020-01-15 22:07; edited 1 time in total

[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

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

[Quote]

    puhpol
  • 2
  • Longevity: 10 years
  • Posts: 891
  • REPUTATION:75

    [+] [-]
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, Извиняюсь, но на данный момент пауза.
Нужно что то с сервером делать.

[Quote]

    Guest
  • REPUTATION:0

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

[Quote]

    avalat
  • 222
  • Longevity: 10 years
  • Posts: 496
  • REPUTATION:127

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

Page 1 of 2


Display posts:    

Current time is: 07-Feb 23:14

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum