нажатие на кнопки

Статус
Закрыто для дальнейших ответов.

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Вот код для CS3 (расставляет направляющие по бокам странички)
Код:
#targetengine "session"
res =
"palette { \
me: Group { orientation: 'row', \
me1: Button { text:'направляющие' } \
me3: Button { text:'close' } \
}, \
}";
win = new Window (res);

win.me.me1.addEventListener('click', eventHandler);

win.me.me3.onClick=function()
{
win.close();
}

win.center();
win.show();

function eventHandler()
{
mm = 2.834645;
lsd = activeDocument;
lsd.rulerOrigin = Array(0, 0);    
xxx = lsd.width/mm;  
yyy = lsd.height/mm; 
metkilayer = lsd.activeLayer;
metka = metkilayer.groupItems.add();   
line(metka,-2536.472,0,3243.086,0);
line(metka,0,-2648.956,0,3130.603);
line(metka,-2536.472,yyy,3243.086,yyy);
line(metka,xxx,-2648.956,xxx,3130.603);
}

function line(parent,x1,y1,x2,y2){
	var line = parent.pathItems.add();
	line.stroked = true;
	line.filled = false;
        line.guides = true;
	line.setEntirePath( Array( Array(x1*mm, y1*mm), Array(x2*mm, y2*mm) ) );
}

Не работают кнопки: ни одна, ни вторая. И мне не догнать как заставить их работать. Пожалуйста, подскажите, что в коде не так.

ЗЫ. Причем, если palette заменить на dialog, то кнопки работают так: если нажать на close - окошко закрывается. А если нажать на "направляющие" ничего не происходит, но если после этого нажать на "close", то окошко закрывается и скрипт выполняется как надо.
 

dtp

12 лет на форуме
Сообщения
61
Реакции
17
Ответ: нажатие на кнопки

Вот так работает:
PHP:
#targetengine "session"
res =
"dialog { \
me: Group { orientation: 'row', \
me1: Button { text:'направляющие' } \
me3: Button { text:'close' } \
}, \
}";
win = new Window (res);

win.me.me3.onClick=function()
{
win.close();
}


win.me.me1.onClick=function()
{
mm = 2.834645;
lsd = activeDocument;
lsd.rulerOrigin = Array(0, 0);    
xxx = lsd.width/mm;  
yyy = lsd.height/mm; 
metkilayer = lsd.activeLayer;
metka = metkilayer.groupItems.add();   
line(metka,-2536.472,0,3243.086,0);
line(metka,0,-2648.956,0,3130.603);
line(metka,-2536.472,yyy,3243.086,yyy);
line(metka,xxx,-2648.956,xxx,3130.603);
win.close();
}

function line(parent,x1,y1,x2,y2){
	var line = parent.pathItems.add();
	line.stroked = true;
	line.filled = false;
        line.guides = true;
	line.setEntirePath( Array( Array(x1*mm, y1*mm), Array(x2*mm, y2*mm) ) );
}

win.center();
win.show();
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Ответ: нажатие на кнопки

Да, так работает, это я знаю и мне так не нравится.

Хотелось бы, чтобы скрипт выполнялся сразу после нажатия на кнопочку "направляющие" без всякого закрытия окна (именно для этого я и делал, вместо dialog, palette, думал это хоть поможет...)

То есть, почему перестает работать кнопочка "направляющие" как только dialog становится palette?
 

AirGraph

Участник
Сообщения
244
Реакции
21
Ответ: нажатие на кнопки

Да не стоит так все усложнять. Зачем тебе eventHandler? Повесь на кнопку функцию, ты же ведь обрабатываешь не любой клык мыша, а только клык по этой кнопке. Сделай все тупо по описанию, у меня, например, по описанию работает без вопросов. Немедленно выполняет скрипт при нажатии на кнопку. В другой ветке страница описания указана.

AirGraph.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Ответ: нажатие на кнопки

AirGraph сказал(а):
Да не стоит так все усложнять...
AirGraph.

Может я не так объясняю... Я ничего не хочу усложнять, я хочу понять, почему не работает мой вышеприведенный пример и мне не догнать.

Сейчас, да и раньше, я писал как посоветовал dtp, но мне не нравится, что для выполнения самого тела скрипта необходимо закрывать окно, т.е в конце что-то делающей функции ставить win.close() - получается, что скрипт работает не при нажатии на кнопку, а еще надо и close окна сделать. Поэтому я делал palette, думал запустил скрипт и повисла себе панелька, нажал кнопку выполнилось, подправил какие-нибудь параметры, опять нажал - выполнилось. Всё закрыл.

А в примере dtp если из dialog сделать palette вообще не работает скрипт. Как-будто я нажатие кнопок не описывал....

В другой ветке страница описания указана
Всё зима меня доконала, я совсем ничего не соображаю, где это, плиз?
 

AirGraph

Участник
Сообщения
244
Реакции
21
Ответ: нажатие на кнопки

http://forum.rudtp.ru/showthread.php?t=32675&page=2&pp=20

Вообще говоря это не круто называть свои функции именами типа eventHandler. Они могут быть зарезервированными глобальными именами или еще чем-то таким особенным. Рекомендую в ветке скриптинга ID почитать дискуссию в теме Документирование больших проектов. Там обсуждались имена идентификаторов и все такое. Это как раз твой случай. Читать твой код непросто (кроме того что в лом разбираться) ;-), особо мне понравился идентификатор lsd. Было бы еще круче, если бы ты написал £$D... ;-))))) Сделай все как в описанном примере - все работает.

AirGraph.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Ответ: нажатие на кнопки

AirGraph сказал(а):
особо мне понравился идентификатор lsd
AirGraph.
это же пример, некогда было имена всякие давать...
AirGraph сказал(а):
Сделай все как в описанном примере - все работает.
AirGraph.
я не могу понять про какой пример идет речь.
 

AirGraph

Участник
Сообщения
244
Реакции
21
Ответ: нажатие на кнопки

InDesign CS3 Scripting Guide JS.pdf стр. 83.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Ответ: нажатие на кнопки

AirGraph сказал(а):
InDesign CS3 Scripting Guide JS.pdf стр. 83.
ок, спасибо, ща разгребу работу и займусь внимательным чтением =)
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Ответ: нажатие на кнопки

всё равно не работает...
И я так понял, что из-за вот этой строчки: lsd = activeDocument;
ибо на этой строчке спотыкается ESTK. То есть данная переменная ссылается чёрт знает куда, а не на активный документ ила...
как это поправить, я не знаю.
 

AirGraph

Участник
Сообщения
244
Реакции
21
Ответ: нажатие на кнопки

Надо попробовать написать так:

lsd = app.activeDocument;

AirGraph.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Ответ: нажатие на кнопки

пробовал неоднократно. не фурычит =(

изначально в js console lsd выглядит так:
Код:
lsd
Result: [Document Untitled-3]

а когда выполнение скрипта доходит до lsd = app.activeDocument, в консоли lsd выглядит так:
Код:
lsd
Result: [Document]

То есть, я так понимаю, прощай объект документик и, поэтому ничего и не работает. Почему так происходит не понимаю. Скрипт использовался самый первый в этом посте.
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 033
Реакции
1 199
Ответ: нажатие на кнопки

AirGraph, может наводочку дашь, почему при заходе в функцию, описывающую действия при нажатии на кнопочку, теряется ссылка на активный документ? То есть lsd = is undefined. У меня фантазия иссякла...
 
Статус
Закрыто для дальнейших ответов.