Выполнение макроса при запуске презентации (Impress)

Автор JBrown, 7 декабря 2020, 22:15

0 Пользователи и 1 гость просматривают эту тему.

JBrown

В меню Tools->Customize->Events можно привязать существующий макрос к событиям, но события "Запуск презентации" там нет... Существует ли способ запуска макроса в момент старта презентации?

economist

Можно запустить макрос и он сам запустит презу. Можно в нем выполнять вечные циклы для паузы и показа, можно показывать нужные слайды, можно добавить Listner-ы, которые будут запускать макросы при клике на произвольных (а не преднастроенных) фигурах, фото, таблицах, обновлять их из БД итд. Пример запуска:

oPres = ThisComponent.Presentation
oPres.Start
wait 2000 ' millisec
if oPres.IsPaused() then msgbox("Пауза!")
if oPres.IsRunning() then msgbox("Running!")
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

JBrown

Хотелось сделать так, чтобы презентация запускалась обычным для пользователя способом. То есть запускается Impress, загружается документ odp, запускается слайдшоу по клавише F5. На этом всё - никаких дополнительных действий не требуется.

Появился следующий вариант:
В меню Impress (Tools->Customize->Events) есть событие 'Activate Document'. Оно возникает как при открытии документа odp, так и при запуске слайдшоу(!) а, также, каждый раз при переключении между ними по клавише Alt+Tab. Привяжем к этому событию макрос. Макрос, к примеру, будет инициализировать глобальные переменные. При некоторых срабатываниях инициализацию делать не нужно, поэтому "ложные" срабатывания нужно отсечь в этом макросе. Одним словом, инициализация должна быть выполнена лишь один раз - при запуске слайдшоу.

Примерный код приведен ниже. Макрос PreInit нужно привязать к событию 'Activate Document' через меню Tools->Customize->Events. Сама инициализация происходит в процедуре MainInit.


GLOBAL initHasAlreadyBeen AS BOOLEAN

Sub PreInit
  if NOT ThisComponent.presentation.isRunning then initHasAlreadyBeen=false 
  if NOT initHasAlreadyBeen AND ThisComponent.CurrentController.ViewControllerName="FullScreenPresentation" then
    initHasAlreadyBeen=True
    MainInit
  end if
End Sub

Sub MainInit
  print "QuQu"
End Sub