Избранное »

22.09.2014 – 07:27 | 2 комментария | 8 010 views

Здравствуйте все, кто работает в Индизайне!
Извещаем вас о том, что на youtube.com начал работу канал «InDesign Мастерская вёрстки». Там уже размещены более 60 видео с полным описанием как работать с программой DoTextOK. Другие интересные темы, касающиеся работы …

Читать полностью »
Работа в InDesign

Хитрости и секреты, приемы работы, уроки

Новая версия!

Особенности новой версии Индизайна

Плагины

Описание плагинов, информация о плагинах для работы с Adobe InDesign

Скрипты

Готовые к использованию скрипты для Adobe InDesign

Скриптинг

Описание языка, приёмов и методов программирования для Adobe InDesign

Home » Скриптинг

Неприятности с окном диалога

Добавлено на 15.04.2011 – 01:20One Comment | 243 views

Работая с окнами, сделанными при помощи скриптов, я наткнулся на весьма неприятную ситуацию — появление на экране моего окна запрещало работу с текстом. Эта ошибка имеет место только в версии 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 обойти эту засаду, сообщите, благодарность моя будет не знать границ в разумных пределах — я скажу Вам спасибо на нашем сайте. : ))

Но пока я нашел такое решение: щелчок курсором в любом из полей панели измерений, например, в окне названия шрифта или поле размера буквы, делает это окно неактивным и можно работать с текстом.

Вот такие дела.

М.И.

One Comment »

  • iv-mi:

    Не прошло и суток, как Сергей Субботин прислал решение этой проблемы.
    На эти грабли наступали многие, и решение было опубликовано на форуме скриптописателей
    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();

    Еще раз спасибо Сергею за оперативный ответ!

Оставить комментарий!

Вы должны быть в системе чтобы оставить комментарий.