Progress bar для CS6...Не обновляется, как исправить?

  • Автор темы Автор темы Larvatus
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Код:
var ProgressBar = function(title)
{
var w = new Window('palette', title, {x:0, y:0, width:640, height:60},{closeButton: false}),
pb = w.add('progressbar', {x:20, y:32, width:600, height:12}),
st = w.add('statictext', {x:20, y:12, width:600, height:20});
st.justify = 'left';
w.center();
this.reset = function(msg,maxValue) {
st.text = msg;
pb.value = 0;
pb.maxvalue = maxValue;
w.show();
};
this.hit = function() {++pb.value;};
this.hide = function() {w.hide();}; // эта функция гасит окно процесса исполнения задания
this.close = function() {w.close();};
}
 
var myProgramTitul = " Что для иностранца progressbar, то для русского градусник  ";
var pBar = new ProgressBar(myProgramTitul);
pBar.reset(" Задание выполняется... " , 10);
for( i=0 ; i < 10; ++i, pBar.hit())  { // обращение к функци pBar.hit()
app.documents.add();
}
pBar.close();
Скрипт создаёт десять документов и двигает progressbar по мере их создания. Всё работает в Illustrator CS5 на Windows. На CS6 проверить пока не могу.
 
  • Спасибо
Реакции: Larvatus и _MBK_
На CS3 работает, так что все не так печально, как я думал. ;)
 
Всё работает в Illustrator CS5 на Windows. На CS6 проверить пока не могу.
В CS6 на Windows 7 не работает( . Точнее документы создаются, но полоса висит в первом положении и не двигается на всем протяжении работы скрипта
 
кажется нашел - redraw(); Буду испытывать...
 
Буду испытывать...
Если получится — интересно будет посмотреть, не забудьте рассказать.
Проверил — в CS6 действительно не работает. Ощущение такое, что progressbar как бы "не успевает" за процессом. Т.е. если в процесс воткнуть alert — полоса будет двигаться как надо.
Проверил заодно и в Индизайне CS6 — версия подтвердилась, только теперь в другую сторону: сначала progressbar пробегает свою дистанцию, а потом "прорисовываются" созданные документы.
Как быть — мыслей нет.:)
 
  • Спасибо
Реакции: Larvatus
есть еще метод update() у Window - не документирован, и не везде работает (может выкинуть ошибку)
 
  • Спасибо
Реакции: Larvatus
Да, чёрт с ним, с прогрессбаром. Update(), вроде только на маке нужен, а в винде палитра и без этого обновляется, хотя врать не буду, читал про это мельком. Мне кажется, что тут как обычно адобовцы убили то, что работало.

Не по теме:

Тут узнал (давно не в теме был), что, оказывается, в illustrator CS6 появилась возможность обращаться к командам меню, например, открыть диалог печати: app.executeMenuCommand('Print');
Правда толку от этого немного, но всё же, мало ли.
Вот тут человек описывает как достать названия самих команд.
Если кратко:
1. Сначала создаешь экшн и вставляем в него нужное меню
2. Экшн сохраняем в файл, открываем блокнотом и копируем оттуда длинную строку цифр см. рисунок на сайте
3. Далее строку раскодируем в читабельный вид - вот и команда.

 
  • Спасибо
Реакции: Larvatus
Т.е. если в процесс воткнуть alert — полоса будет двигаться как надо.
c алертом работает, но следующий цикл не начинается, пока алерт не скроешь. Как его закрыть из скрипта?

.

'dans))'

Код:
var w = new Window('palette', 'sdfasdfd', {x:0, y:0, width:640, height:60},{closeButton: false}),
pb = w.add('progressbar', {x:20, y:32, width:600, height:12}),
st = w.add('statictext', {x:20, y:12, width:600, height:20});
st.justify = 'left';
w.center();
 
 
 
var ProgressBar = function(title)
{
 
this.reset = function(msg,maxValue) {
st.text = msg;
pb.value = 0;
pb.maxvalue = maxValue;
w.show();
var value = 0;
//w.layout.layout(true);
};
this.hit = function() {++pb.value; pBar.redraw(); };
this.hide = function() {w.hide();}; // эта функция гасит окно процесса исполнения задания
this.close = function() {w.close();};
this.redraw = function() {redraw();};
this.update = function() {pb.value = i; w.update(true);};
}
 
 
var myProgramTitul = " sdfasdfasdf  ";
var pBar = new ProgressBar(myProgramTitul);
pBar.reset(" Задание выполняется... " , 10);
 
for( i=0 ; i < 10; ++i, pBar.hit())  { // обращение к функци pBar.hit()
app.activeDocument.layers.add();
//pBar.redraw();
//alert();
//alert(i);
pBar.update(i);
//pBar.update();
$.sleep(400);
 
}
 
/*
while(i<10){
  w.center();
  w.show();
  pBar.hit();
  //pb.value = pb.value + 1;
  i = (i + 1);
  w.update(true);
  $.sleep(300);
 
 
}; */
 
pBar.close();

не знаю каким чудом, но это анимирует прогрессбар!!! уффф!!! Сейчас буду смотреть что сделал, ибо это написал уже в минуты отчаяния методом Тыка-Копипаста...)
 
'fp' нет, оказалось работает через раз и вообще как захочет. Полосу двигает, но ее значение растет абсолютно непропорционально выполнению алгоритма. Т.е. один раз после создания трех слоев подвинул ползунок сразу на 3/10, потом еще на 3. Другой раз после каждого слоя наращивал по 1/10...'hz'
 
hide/show пробуйте. и прогресс бар в отдельном окне
 
  • Спасибо
Реакции: Larvatus
а может не отображаться из-за $.sleep(200); ??'8]
 
var ProgressBar = function(title) { var w = new Window('palette', title, {x:0, y:0, width:640, height:60},{closeButton: false}), pb = w.add('progressbar', {x:20, y:32, width:600, height:12}), st = w.add('statictext', {x:20, y:12, width:600, height:20}); st.justify = 'left'; w.center(); this.reset = function(msg,maxValue) { st.text = msg; pb.value = 0; pb.maxvalue = maxValue; w.show(); }; this.hit = function() {++pb.value;}; this.hide = function() {w.hide();}; // эта функция гасит окно процесса исполнения задания this.close = function() {w.close();}; } var myProgramTitul = " Что для иностранца progressbar, то для русского градусник "; var pBar = new ProgressBar(myProgramTitul); pBar.reset(" Задание выполняется... " , 10); for( i=0 ; i < 10; ++i, pBar.hit()) { // обращение к функци pBar.hit() app.documents.add(); } pBar.close();
если после
добавить
var d3 = new Window ("palette", "Progress", [0,0,0,0]);
d3.close();
,то работает! =) По крайней мере на W7 AI CS6 =)
:) Всем спасибо!!!
 
много для чего недоступного из scripting dom (навскидку - Offset Path). также экшены можно запускать.
вообще, скрипты для иллюстратора - это наборы хаков и workaround'ов :(
 
var d3 = new Window ("palette", "Progress", [0,0,0,0]); d3.close();
То есть, насколько я понимаю, для того, чтобы в иллюстраторе CS6 корректно отображался progressbar нужно в процессе работы постоянно создавать новое окно progressbar и тут же его уничтожать? Воистину, неисповедимы пути Адобы! 'shok2'
 
нет, не нужно. достаточно скрывать и показывать существующее.
 
  • Спасибо
Реакции: _MBK_
Статус
Закрыто для дальнейших ответов.