Как достучаться до коллекции Swatches из VisualBasica?

  • Автор темы Автор темы Alex L
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Alex L

Участник
Топикстартер
Сообщения
5
Реакции
0
Принимаю коллекцию Swatches текущего документа.
Вижу его свойство Count
Присваиваю элементу Swatch значение Swatches.FirstItem()
Вижу его свойства, например Name
Пытаюсь взять следующий елемент из коллекции Swatches.NextItem(Swatch)
и тут уже не получается, говорит, что интерфейс не поддерживается.
Куда рыть?
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

А вы точно на VB скрипт пишите?
PHP:
Swatch = Swatches.FirstItem()
Там такая штука работать не должна. Надо вот так:
PHP:
mySwatch = myInDesign.ActiveDocument.Swatches.FirstItem
А лучше так:
PHP:
myIndex = myInDesign.ActiveDocument.Swatches.FirstItem.Index
mySwatch = myInDesign.ActiveDocument.Swatches.Item(myIndex)	
mySwatch = myInDesign.ActiveDocument.Swatches.Item(myIndex+1)
А еще лучше все swatch загнать в массив и потом брать, когда нужно!!!
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

Не совсем, пишу на С# из под 2005 студии.
Со всеми коллекциями получается работать нормально, на сегодняшний день проблемма только с Swatches.
В описании библиотеки Interop.Indesign усть методы Swatches.FistItem() и соответственно Swatches.NextItem(Swatsh), так вот на NextItem и ругается.
В массив я и хочу загнать, foreach с этой коллекцией тоже не работает.
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

Попробовал сделать то же самое в студийном-2005 Basice
PHP:
Dim ap As InDesign.Application
Dim sw As InDesign.Swatch
ap = CreateObject("InDesign.Application.CS2")
Dim i As Integer
i = ap.ActiveDocument.Swatches.FirstItem.Index
sw = ap.ActiveDocument.Swatches.Item(i)
sw = ap.ActiveDocument.Swatches.Item(i + 1)
результат тотже, первая строка присвоения sw срабатывает, а на второй выдает ошибку.
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

У меня работает 100%, я проверял. А у вас в публикации 2-й цвет-то есть?
Что за ошибку выдает?
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

Вот только что проверил еще раз, код
PHP:
Dim app As InDesign.Application
Dim doc As InDesign.Document
Dim sws As InDesign.Swatches
Dim sw As InDesign.Swatch
Dim i As Integer
app = CreateObject("InDesign.Application.CS2")
doc = app.ActiveDocument
sws = doc.Swatches
i = sws.Count

sw = sws.FirstItem
sw = sws.NextItem(sw)
Count = 47
первое определение sw нормально, при втором - ошибка
PHP:
Невозможно привести COM-объект типа "System.__ComObject" 
к интерфейсному типу "InDesign.Swatch". 
Операция завершилась со сбоем, поскольку вызов 
QueryInterface COM-компонента для интерфейса с 
IID "{A373654F-4F5C-11D2-AB07-00C04FA349C7}" 
возвратил следующую ошибку: 
Интерфейс не поддерживается 
(Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

Alex L сказал(а):
Вот только что проверил еще раз, код
PHP:
sw = sws.FirstItem
sw = sws.NextItem(sw)
Вы опять, непонятно зачем, вернулись к тому, что было в исходном посте...
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

Может TLB глюкавая?
У меня Resources for Visual Basic.tlb размер 1209кб от 30.10.2006
Самое смешное, что глюк именно с этой коллекцией (swatches), все остальное, а написано не мало, работает без проблем.
А Вы в какой среде проверяли?
Чтоб не флеймить, давай перейдем в аську, моя 161-872-728
 
Ответ: Как достучаться до коллекции Swatches из VisualBasica?

Пытаясь разобраться с проблемой, пришел к следующему. Сложностей у большинства скриптописателей с обращением к свотчам по индексу нет, т.к. не приходится явно оъявлять все переменные (в родном приложении). Иначе имеет место проблема, которую описал автор топика. Написал тестовый скрипт, кот. отображает тип каждого свотча. Оказалось, что лишь первый свотч (None) имеет тип Swatch, остальные - Color.
Вот результат работы скрипта
PHP:
Номер Имя Тип
 1 None Swatch
 2 Paper Color
 3 Black Color
 4 Registration Color
 5 C=100 M=0 Y=0 K=0 Color
 6 C=0 M=100 Y=0 K=0 Color
 7 C=0 M=0 Y=100 K=0 Color
 8 C=15 M=100 Y=100 K=0 Color
 9 C=75 M=5 Y=100 K=0 Color
 10 C=100 M=90 Y=10 K=0 Color
 
Статус
Закрыто для дальнейших ответов.