|
1c81 и PowerPoint (продолжение) | ☑ | ||
---|---|---|---|---|
0
247tsm
19.10.14
✎
03:50
|
Я в 1с81 делаю слайд-шоу с помощью макета Active document.
Спасибо знатоку 1С Asmody. Он подсказал, как открыть презентацию PowerPoint: - Сделал макет Word, вставил в него презентацию PP. - И вот таким кодом оно открывается Док = ЭтотОбъект.ПолучитьМакет("Макет").Получить(); Док.InlineShapes(1).OLEFormat.Activate(); Но мне нужно еще и программно задавать свойства презентации: - скорость перехода к следующему слайду - смена слайда автоматически после, например 5 сек. - эффект анимации - растворение или случайный выбор ... Чтобы посмотреть код этих команд, я использовал запись макросов в PowerPoint: With ActivePresentation.SlideShowSettings .ShowType = ppShowTypeKiosk .LoopUntilStopped = msoTrue .ShowWithNarration = msoTrue .ShowWithAnimation = msoTrue .RangeType = ppShowAll .AdvanceMode = ppSlideShowUseSlideTimings .PointerColor.RGB = RGB(Red:=255, Green:=0, Blue:=0) End With ActiveWindow.View.DisplaySlideMiniature = msoTrue With ActiveWindow.Selection.SlideRange.SlideShowTransition .EntryEffect = ppEffectDissolve .Speed = ppTransitionSpeedMedium .AdvanceOnClick = msoFalse .AdvanceOnTime = msoTrue .AdvanceTime = 2 .SoundEffect.Type = ppSoundNone End With Но никак не могу в 1с правильно это записать. Пробовал через отладчик просмотреть свойства для Док.InlineShapes(1).OLEFormat, но пока ни к чему не пришел. Нужна помощь. Как выше написанное в VB переложить на 1С81? Спасибо. |
|||
1
manyak
19.10.14
✎
09:41
|
http://msdn.microsoft.com/en-us/library/office/ff746794(v=office.15).aspx
ppEffectDissolve это 1537 ActiveWindow.Selection.SlideRange.SlideShowTransition .EntryEffect = ppEffectDissolve Пиши ActiveWindow.Selection.SlideRange.SlideShowTransition .EntryEffect = 1537 |
|||
2
manyak
19.10.14
✎
09:42
|
В vba тоже можно смотреть значения числовые параметров в objectbrowser
|
|||
3
manyak
19.10.14
✎
09:45
|
Конструкцию with убирай и к каждой строке добавляй ActiveWindow.Selection.SlideRange.SlideShowTransition.
|
|||
4
247tsm
19.10.14
✎
12:12
|
(3) За подсказку, где искать константы, спасибо, но осталась другая проблема. Объект у меня такой: в Word-е я добавил презентацию и хочу менять свойства, константы именно в этой презентации. Я не могу найти путь, т.е. ту последовательность объектов "через точку", чтобы задать эти константы.
Вот так работает: Док = ЭтотОбъект.ПолучитьМакет("Макет1").Получить(); Док.InlineShapes(1).OLEFormat.Activate(); А так выдает ошибку, что "Поле объекта ActiveWindow не обнаружено": Док = ЭтотОбъект.ПолучитьМакет("Макет1").Получить(); ддок = док.InlineShapes(1).OLEFormat.ActiveWindow.Selection.SlideRange.SlideShowTransition; ддок.EntryEffect = 1537; Док.InlineShapes(1).OLEFormat.Activate(); Я пробовал смотреть в отладчике, и методом "тыка", но там так много свойств и много уровней... Пока не нашел. Нужна помощь. |
|||
5
manyak
19.10.14
✎
13:44
|
алгоритм такой: сначала полностью добейся рабочего кода в !VBA! а потом переноси в 1с.
если есть готовый VBA код - сюда выкладывай полностью его и его же версию для 1с. так как .ActiveWindow действует только для приложения ppoint - т.е. для Док а не для ддок пока не выложишь два кода - помощи смысла нет ждать. |
|||
6
247tsm
19.10.14
✎
18:21
|
(5) Вот запись макроса в PowerPoint:
Sub Макрос2() ActiveWindow.View.DisplaySlideMiniature = msoTrue With ActiveWindow.Selection.SlideRange.SlideShowTransition .EntryEffect = ppEffectDissolve .Speed = ppTransitionSpeedMedium .AdvanceOnClick = msoTrue .AdvanceOnTime = msoFalse .SoundEffect.Type = ppSoundNone End With ActiveWindow.View.DisplaySlideMiniature = msoTrue End Sub а вот я пытаюсь перенести это в 1С (только для EntryEffect = ppEffectDissolve): Док = ЭтотОбъект.ПолучитьМакет("Макет1").Получить(); ддок = док.InlineShapes(1).OLEFormat.ActiveWindow.Selection.SlideRange.SlideShowTransition; ддок.EntryEffect = 1537; Док.InlineShapes(1).OLEFormat.Activate(); Вот сообщение об ошибке: {Обработка.РабочийСтол.Форма.Форма(585)}: Поле объекта не обнаружено (ActiveWindow) ддок = Док.InlineShapes(1).OLEFormat.ActiveWindow.Selection.SlideRange.SlideShowTransition; Пытаюсь по-другому: Док = ЭтотОбъект.ПолучитьМакет("Макет1").Получить(); ддок = Док.Application.ActiveWindow.Selection.SlideRange.SlideShowTransition; ддок.EntryEffect = 1537; Док.InlineShapes(1).OLEFormat.Activate(); Наверно, правильнее, но, всё-равно, ошибка: {Обработка.РабочийСтол.Форма.Форма(587)}: Ошибка при получении значения атрибута контекста (ActiveWindow): Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ. ддок = Док.Application.ActiveWindow.Selection.SlideRange.SlideShowTransition; переменная ддок здесь только помогает избавиться от повторений длинной строки "док.InlineShapes(1).OLEFormat.ActiveWindow.Selection.SlideRange.SlideShowTransition" |
|||
7
247tsm
19.10.14
✎
18:26
|
(5) или так:
ддок = Док.InlineShapes(1).OLEFormat.Application.ActiveWindow.Selection.SlideRange.SlideShowTransition; ддок.EntryEffect = 1537; Но та же ошибка: {Обработка.РабочийСтол.Форма.Форма(587)}: Ошибка при получении значения атрибута контекста (ActiveWindow): Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ. ддок = Док.InlineShapes(1).OLEFormat.Application.ActiveWindow.Selection.SlideRange.SlideShowTransition; |
|||
8
manyak
19.10.14
✎
21:00
|
:) у тебя исходный код vba и 1с два разных кода.
это как будто ты переводил слово mother а в переводе пишешь "папа" и спрашиваешь почему перевод не правильный подсказка, в исходном коде у тебя нет InlineShapes(1), а в 1с есть, прям чудеса какие-то... код будет же почти один в один, тока параметры числовым значением и в начале везде будет либо "док" либо "ддок" |
|||
9
manyak
19.10.14
✎
21:02
|
вот в 1с так же 7 строк будет у тебя |
|||
10
247tsm
19.10.14
✎
22:23
|
(9) Я за основу беру то, что работает в 1С. А работает вот это:
Док = ЭтотОбъект.ПолучитьМакет("Макет1").Получить(); Док.InlineShapes(1).OLEFormat.Activate(); Далее, в отладчике 1С беру Док.InlineShapes(1).OLEFormat и смотрю с помощью вычислителя выражения его свойства. Но... Этих свойств много. Некоторые из них имеют свои наборы свойств и т.д. Я, к сожалению, не знаю, какие свойства надо смотреть, поэтому и попросил помощи. Я знаю начало и конец правильного выражения: Начало (скорее всего такое): Док.InlineShapes(1).OLEFormat. ... а конец - это то, о чем ты говоришь, выражение c with. Т.е., примерно так: Док = ЭтотОбъект.ПолучитьМакет("Макет1").Получить(); ддок = док.InlineShapes(1).OLEFormat.КАКИЕ_ТО_СВОЙСТВА.ActiveWindow.Selection.SlideRange.SlideShowTransition; ддок.EntryEffect = 1537; ддок.Speed = ***; ддок.AdvanceOnClick = ложь; ддок.AdvanceOnTime = истина; ддок.SoundEffect.Type = ***; Док.InlineShapes(1).OLEFormat.Activate(); В этом фрагменте кода есть неизвестные: КАКИЕ_ТО_СВОЙСТВА и ***. Так вот, я не могу найти эту часть выражения: КАКИЕ_ТО_СВОЙСТВА. |
|||
11
247tsm
19.10.14
✎
22:26
|
(9) Вдогонку, в PowerPoint нет InlineShapes потому, что я делаю макрос, находясь "внутри" PowerPoint. А в 1с я подхожу к PowerPoint "снаружи", т.е. я считаю, что Док.InlineShapes(1).OLEFormat и является той "наружной" частью выражения.
|
|||
12
Asmody
19.10.14
✎
22:48
|
OLEFormat - это OLE-представление документа PowerPoint в твоём случае. Пока ты его не активировал, документа как-бы нет (точнее, нет его объекта).
После Activate() можно воспользоваться OLEFormat.Object для изменения свойств открытой презентации. В частности, есть свойства SlideMaster, SlideShowSettings и т.п. |
|||
13
247tsm
19.10.14
✎
23:17
|
(12) Но в отладчике на:
Док.InlineShapes(1).OLEFormat.Object выдает ошибку: {(1)}: Ошибка при получении значения атрибута контекста (Object): Произошла исключительная ситуация (0x80004002) |
|||
14
Asmody
19.10.14
✎
23:20
|
(13) смотри его значение после выполнения Activate
|
|||
15
247tsm
19.10.14
✎
23:24
|
(14) Я так и делаю. Точка останова после Activate.
|
|||
16
247tsm
19.10.14
✎
23:27
|
(14) Кстати, у меня PowerPoint 2003. Может, в этом дело?
Но презентация тоже в PowerPoint 2003. Ведь Док = ЭтотОбъект.ПолучитьМакет("Макет1").Получить(); Док.InlineShapes(1).OLEFormat.Activate(); срабатывает нормально. |
|||
17
Asmody
19.10.14
✎
23:41
|
Короче, накрутил ты себе проблем. Сделал бы в html давно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |