Отнять окно у документа

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

James_A

Участник
Топикстартер
Сообщения
24
Реакции
0
Известно, что "долгоиграющие" скрипты выполняются быстрее, если окно документа свернуто. Известно, что они выполняются еще быстрее, если при открытии документа не назначить ему окно {app.open(MyFile, False)}
Вопрос: можно ли "отнять" окно у уже открытого документа, выполнить скрипт, а потом вернуть окно?
Пробовал MyDoc.window.close - ИД говорит, что это типа последнее оставшееся окно у документа и его нельза закрыть не закрыв при этом сам документ.
 
Ответ: Отнять окно у документа

ИМХО только закрыть и потом открыть уже без окна.
 
Ответ: Отнять окно у документа

Жаль. Мне желательно, чтобы выделение объектов осталось.
 
Ответ: Отнять окно у документа

Вешайте им лэйблы.
 
Ответ: Отнять окно у документа

Набор объектов непредсказуемый - зависит от дизайна.

Кстати, еще одна проблема (если я еще не совсем достал своими вопрсами). Как получить доступ к тексту в ячейках таблицы.
Пробовал способ, аналогичный описанному в JS. Переменной возвращается Objects. (MyTable - таблица)

MyTableText := MyTable.Cells.ItemByRange(MyTable.Cells.FirstItem,
MyTable.Cells.LastItem);

И далее MyTableText.texts(1).pointSize := 12 работать не хочет из-за отсутствия метода (оно и верно - в Objects нету Texts), хотя на JS почему-то работает? Приходится для каждой ячейки отдельно выставлять. А это дополнительный вложенный цикл, а таблицов в выделении много, а ячейков в каждой...
Может есть какой другой способ?
Вот ща сижу сам и извращаюсь - пытаюсь идею словить.
 
Ответ: Отнять окно у документа

James_A сказал(а):
Набор объектов непредсказуемый - зависит от дизайна.

Ну так пройдитесь по объектам, повесьте им лэйблы, закройте документ, откройте без окна... далее по алгоритму.

James_A сказал(а):
Вот ща сижу сам и извращаюсь - пытаюсь идею словить.

Надо сделать вставку на JS. Тогда можно будет присваивать всем ячейкам сразу. По-другому никак.

Вы ведь там на дельфе мастрячите? Сделайте на форме невидимое TMemo запишите в него скриптик на JS и выполняйте методом doScript.
 
Ответ: Отнять окно у документа

Да на дельфе. Но я, извиняюсь, никогда вставок не делал - не пойму doScript это чей метод TMemo или формы - ни там ни там такого нету. Или модуль какой подключать надо? И потом: как я передам указатель на нужный мне объект скрипту?
И скрипт потом будет выполняться интерпретатором ИД или откомпилируется Делфи?

PS. Открыл еще один плюс скриптописания на Delphi: Пока "долгоиграющий" скрипт колбасит один документ, можно не бамбук курить, а спокойно верстать что-то другое. (На JS по-моему такого сделать нельза как раз из-за интерпретатора).
 
Ответ: Отнять окно у документа

James_A сказал(а):
Да на дельфе. Но я, извиняюсь, никогда вставок не делал - не пойму doScript это чей метод TMemo или формы - ни там ни там такого нету.

Естественно нету. Это метод индизайновского объекта application.

James_A сказал(а):
Или модуль какой подключать надо? И потом: как я передам указатель на нужный мне объект скрипту?

Скрипты умеют принимать параметры и возвращать результаты.

James_A сказал(а):
И скрипт потом будет выполняться интерпретатором ИД или откомпилируется Делфи?

Сами-то как думаете? :D
 
Ответ: Отнять окно у документа

Specialist сказал(а):
Сами-то как думаете? :D
Теперь-то уже конечно правильно думаю.

Не по теме:
Грешно смеяться над тупыми людьми, да еще в 4 часа ночи ,)


Однако как праметры передавать и получать один фиг не пойму. Может примерчик какой самый элементарный? Главное подтолкнуть - а там попрет.
 
Ответ: Отнять окно у документа

Код:
Application1.DoScript(Form1.Memo2.Lines.Text, 1246973031, TableNumber);
if Application1.scriptArgs.getValue('TypeName') = 'TextFrame' then
 Frame1:=Table1.parent;

TableNumber - номер таблицы в массиве Selection.
Скрипт возвращает имя ее родителя. Если это TextFrame - значит таблица не в оверсете. Если Story - значит в оверсете.
 
Ответ: Отнять окно у документа

А в коде JS как переменную TableNumber получить? Если начинаю просто использовать с этим именем - ругается, что не определена.
 
Ответ: Отнять окно у документа

Щас покажу и сам скрипт.
Код:
app.scriptArgs.setValue('TypeName', 
app.selection[0].tables[arguments[0]].parent.constructor.name );

arguments[0] - это то, что нам передали.

PS
В Scripting Guide это описано довольно доступно и с примерами, мне это знание с неба не упало.
 
Ответ: Отнять окно у документа

:) Спасибо огромное! Приношу извинения за назойливость.
(А я пробовал по аналогии: app.scriptArgs.getValue('TableNumber'))

PS Чесное слово, прилежно пролистал Адобовский Guide, но не заметил. Видимо с языком туговато.

Еще раз огромное спасибо!!! :) :) :)
 
Ответ: Отнять окно у документа

Обращайтесь...
 
Ответ: Отнять окно у документа

Specialist сказал(а):
Спасибо, а придется... 'hz'
Сперва полностью повторил Ваш пример - фиг. При вызове DoScript сообщение: "Arguments is Undefined".
Далее начинаю извращаться с SetValue и GetValue.
Сообщение "Method 'setValue' (и getValue - соответственно) not supported by automation object".
Смотрю Мануал - действительно нету. Зато нахожу аналогичные scriptArgs.set и scriptArgs.get
С ними получается передавать и получать только строковые переменные.
Но arguments[0] упорно не принимает параметра из DoScript.
Пришлось извернуться, преобразовав в делфи Integer в String, а в JS - наоборот, но это ведь не дело.
А если, например, надо передать вариантный указатель на объект?
У меня CS2 - может поэтому? *(
 
Ответ: Отнять окно у документа

James_A сказал(а):
У меня CS2 - может поэтому? *(

Может быть. У меня - ЦС3. А вообще мы тут с Виталием договорились не коментировать код которого не видно. Так что код в студию.
 
Статус
Закрыто для дальнейших ответов.