Если есть вопросы по скриптам

  • Автор темы Автор темы Oleg Butrin
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Вопрос по подстановке SpecialCharacters в Line.contents

Как обратиться только к объектам, находящимся на активной странице и в активном слое? (Объекты других страниц и слоёв нужно игнорировать.)
 
Ответ: Вопрос по подстановке SpecialCharacters в Line.contents

На первый взгляд так: myObj = activeWindow.activeLayer.allPageItems;
 
Ответ: Вопрос по подстановке SpecialCharacters в Line.contents

К сожалению, activeWindow.activeLayer.allPageItems возвращает объекты (массив объектов) не только текущей, но и всех страниц.
п.1. Такая конструкция app.activeWindow.activePage.textFrames.everyItem () возвращает в виде объекта текстовые фреймы всех слоёв текущей страницы.
п.2. Такая — app.activeWindow.activeLayer.textFrames.everyItem () возвращает в виде объекта текстовые фреймы всех страниц текущего слоя.
А получить объект (или массив объектов), который возвращал бы только с текущей (одно) страницы текущего (одного) слоя, то есть объединение п.1 и 2 почему-то не получается.
Забегая вперед: конечная цель — копирование текстовых фреймов определенного слоя текущей страницы в новый слой.
 
Ответ: Вопрос по подстановке SpecialCharacters в Line.contents

конечная цель —
Код:
var myTF = app.activeWindow.activePage.textFrames;
var myL = app.activeDocument.activeLayer;
for (i = myTF.length-1; i >= 0; i--){
    if (myTF[i].itemLayer == myL) myTF[i].itemLayer = "DestLayer";
    }
 
Ответ: Вопрос по подстановке SpecialCharacters в Line.contents

Скрипт Д. Лапаева Move To Layer. Скрипт предназначен для перемещения объектов определенного типа на выбранный слой.
Обрабатываются текстовые блоки, объекты с текстовыми путями (Type on a Path) и графические линии. Исходный код открыт.
http://sites.google.com/a/lapay.biz/www/m
 
Ответ: Вопрос по подстановке SpecialCharacters в Line.contents

Код:
    if (myTF[i].itemLayer == myL) myTF[i].itemLayer = "DestLayer";

заменил на

Код:
    if (myTF[i].itemLayer == myL) myTF[i].duplicate(myDestLayer);
и получил копирование на слой вместо перемещения.
Еще раз всем спасибо за помощь.
 
Вопрос: Как в CS5 добавить пункт в контекстное меню (шелчком правой кнопки мыши)

var myLayoutContextMenu = app.menus.item("$ID/RtMouseLayout");
var myBeforeDisplayListener = myLayoutContextMenu.addEventListener("beforeDisplay", myBeforeDisplayHandler, false);

вторая строчка выдает ошибку "Объект недоступен" почему? Это фрагмент скрипта LayoutContextMenuLabelGraphic.jsx из библиотеки примеров "indesign_cs5_scripting_guide_scripts.zip" скаченых с сайта Adobe. У кого есть информация помогите!
 
Вопрос: Как в CS5 добавить пункт в контекстное меню (шелчком правой кнопки мыши)

Да именно beforeDisplay, опечатался. Но скрипт все равно дает ошибку.
 
Ответ: Вопрос: Как в CS5 добавить пункт в контекстное меню (шелчком правой кнопки мыши)

Как именно выглядит ошибка?
 
Ответ: Если есть вопросы по скриптам

Попробуйте объявить BeforeDisplayTekst отдельной функцией и передавайте вторым параметром ее. Еще попробуйте вместо addEventListener eventListeners.add . Танцы с бубном но мало ли.
 
Ответ: Если есть вопросы по скриптам

BeforeDisplayTekst это функция - она определена, eventListeners.add тоже не подошло.
Переменная myLayoutContextMenu почему-то пишет - "НЕДОПУСТИМЫЙ ОБЪЕКТ"

Снимок.PNG
 
Ответ: Если есть вопросы по скриптам

BeforeDisplayTekst это функция - она определена,

Вы меня не поняли. Оформите ее вызов как отдельную функцию и имя этой функции передавайте вторым параметром, как в примере было.
 
Ответ: Если есть вопросы по скриптам

function myBeforeDisplayHandler(myEvent){
//Check for open documents is a basic sanity check--
//it should never be needed, as this menu won't be
//displayed unless an item is selected. But it's best
//to err on the side of safety.
if(app.documents.length != 0){
if(app.selection.length > 0){ ... и так далее...

все равно не работает. Я думаю проблема в первой строке var myLayoutContextMenu = app.menus.item("$ID/RtMouseLayout");
myLayoutContextMenu - пишет обьект не определен, а если записать вот так var myLayoutContextMenu = app.menus.item("$ID/Main"); то результат myLayoutContextMenu (объект с именем Main)
 
Ответ: Если есть вопросы по скриптам

levin_va, проясните, пожалуйста. Сначала Вы заговорили о скрипте из стандартных примеров, а потом предъявили скрин с ошибкой в скрипте, который, судя по всему, пишите сами. Что же, всё-таки, обсуждается? )))
Если говорить о Вашем скрипте, то ContextMenuText - это переменная, определенная Вами? Я бы попробовал сначала написать ее с маленькой буквы (аналогично - ContextMenuTextLocale). И на всякий случай проверить название функции beforeDisplayTekst - совпадает ли оно в обеих местах (настораживает написание "Tekst", а не "Text", хотя программно здесь значения не имеет, главное чтоб совпало).
 
Ответ: Если есть вопросы по скриптам

Да уж, действительно, запутаться недолго. В сообщении #687 кусок кода один, в сообщении об ошибке #691 - другой, в #695 - третий. К тому же, у вас в отладчике myLayoutContextMenu - явно не undefind, а вполне нормальный объект меню, то есть ссылка на него возвращается. Для проверки, запустите скрипт не из отладчика, а просто поставьте alert(myLayoutContextMenu);
 
Ответ: Если есть вопросы по скриптам

alert(myLayoutContextMenu); действительно возвращает [Объект меню], но дальше с этим объектом сделать ничего нельзя, все его свойства определены как "НЕДОПУСТИМЫЙ ОБЪЕКТ"
 
Ответ: Если есть вопросы по скриптам

Кажется я понял почему не работает - свойство у объекта isValid=false (только для чтения), теперь думаю как это обойти, возможно ли это?
 
Статус
Закрыто для дальнейших ответов.