Неприятности с окном диалога
Работая с окнами, сделанными при помощи скриптов, я наткнулся на весьма неприятную ситуацию — появление на экране моего окна запрещало работу с текстом. Эта ошибка имеет место только в версии CS4. В CS3 все безупречно, в CS5 тоже в порядке, а вот четверка дурит… : (
Я до этого думал, что там только один хронический баг — потеря сносок. Мы на сайте не раз об этом говорили. Но оказалось, есть еще недоделки.
Вот последовательность шагов, как добраться до этих граблей:
1) сохраните на машине этот скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #target indesign #targetengine "session" FRAME_TO_CONTENT = 1718906723 app.documents[0].textFrames[0].insertionPoints[0].select(); var mySelection = app.selection[0]; var myWin = myDialog(); myWin.show(); ///////// function myDialog() { // myDialog var myWindow = new Window ("palette", "Проблема с обработкой текста"); myWindow.orientation = "column"; var myButtonGroup = myWindow.add ("panel"); myButtonGroup.alignment = "center"; myButtonGroup.orientation = "row"; myOKButon = myButtonGroup.add ("button", undefined,"Втиснуть текст в фрейм", {name:"OK"}); myCancelButon = myButtonGroup.add ("button", undefined,"Завершить", {name:"cancel"}); myCancelButon.onClick = function() { // myCancelButon.onClick myWindow.close(); exit(); } // myCancelButon.onClick myOKButon.onClick = function() { // myOKButon.onClick app.documents[0].textFrames[0].select(); app.documents[0].textFrames[0].fit(FRAME_TO_CONTENT); } // myOKButon.onClick return myWindow; } // myDialog |
2) Откройте новую работу, нарисуйте текстовый фрейм, напишите в нем чего-нибудь.
3) Оставьте курсор в тексте и запустите скрипт из п. 1. Что мы видим? На экране окно диалога, в текстовом блоке мигает курсор, набирай — не хочу! Но попробуйте ввести текст — у вас ничего не выйдет!!
Это открытое окно перехватывает всю работу с клавиатурой. В сравнении с этим поведением окна, в CS5 при попытке ввода текста это открытое окно чуточку гаснет, становясь неактивным, после чего можно вводить текст. Окно станет активным опять после щелчка на нем или на одной из кнопок.
Вот такие грабли в полный рост.
Если кто знает, как средствами JavaScript обойти эту засаду, сообщите, благодарность моя будет не знать границ в разумных пределах — я скажу Вам спасибо на нашем сайте. : ))
Но пока я нашел такое решение: щелчок курсором в любом из полей панели измерений, например, в окне названия шрифта или поле размера буквы, делает это окно неактивным и можно работать с текстом.
Вот такие дела.
М.И.
Не прошло и суток, как Сергей Субботин прислал решение этой проблемы.
На эти грабли наступали многие, и решение было опубликовано на форуме скриптописателей
http://forums.adobe.com/message/3462710#3462710
Я тоже там искал, но видимо, плохо составил запрос.
Итак, чтобы обойти этот капкан, надо использовать событие ‘mouseout’, чтобы автоматически делать InDesign активным, как только курсор выходит за пределы окна. Применительно к моему примеру достаточно провести курсором над окном и оно станет неактивным.
Вот пример с того форума. Он работает, и его легко приспособить к своим задачам.
#targetengine «mySession»
var pal = new Window(«palette», «focustest»,
undefined, {resizeable:true, closeButton:true});
pal.st = pal.add(«statictext», undefined,
«some static text…»);
pal.addEventListener(‘mouseout’, leaveTestPalette);
function leaveTestPalette(/*MouseEvent*/mev)
{
if( mev.target instanceof Window ) app.activate();
}
pal.show();
Еще раз спасибо Сергею за оперативный ответ!