v1.1で追加された、ビューが変更された時に発生するイベント「ActiveViewChanged」と、ビューの状態を取得する「getActiveViewAsync」メソッドの動作をPowerPoint 2013 SP1でテストしてみました。
・Document.ActiveViewChanged event (apps for Office v1.1)
http://msdn.microsoft.com/ja-jp/library/dn482501.aspx
・DocumentActiveViewChangedEventArgs object (apps for Office v1.1)
http://msdn.microsoft.com/ja-jp/library/dn482504.aspx
・Document.getActiveViewAsync method (apps for Office v1.1)
http://msdn.microsoft.com/ja-jp/library/dn482495.aspx
■ マニフェストファイル
<?xml version="1.0" encoding="utf-8"?> <OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp"> <Id>97dec43d-61ee-4354-94ca-7d99be051152</Id> <Version>1.0</Version> <ProviderName>kinuasa</ProviderName> <DefaultLocale>ja-jp</DefaultLocale> <DisplayName DefaultValue="ActiveViewChangedのテスト用アプリ" /> <Description DefaultValue="ActiveViewChangedのテストです。"/> <Hosts> <Host Name="Presentation" /> </Hosts> <Requirements> <Sets> <Set Name="ActiveView" /> </Sets> </Requirements> <DefaultSettings> <SourceLocation DefaultValue="http://localhost/ActiveViewChanged.html" /> </DefaultSettings> <Permissions>ReadWriteDocument</Permissions> </OfficeApp>
■ アプリ本体(ActiveViewChanged.html)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="robots" content="noindex,nofollow"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <title>ActiveViewChange</title> <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.11.0.min.js"></script> <script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js"></script> <script> Office.initialize = function(reason){ $(document).ready(function(){ Office.context.document.addHandlerAsync(Office.EventType.ActiveViewChanged, document_ActiveViewChange, function(asyncResult){ msg("1." + asyncResult.status); }); }); } function document_ActiveViewChange(eventArgs){ msg("2." + eventArgs.type); Office.context.document.getActiveViewAsync(function(asyncResult){ msg("3." + asyncResult.status); if(asyncResult.status == Office.AsyncResultStatus.Succeeded){ msg("4." + asyncResult.value); } }); } function msg(txt){ var s = $("#result").val(); if(s == ""){ $("#result").val(txt); }else{ $("#result").val(s + "\n" + txt); } } </script> </head> <body> <p> <textarea id="result" cols="30" rows="30"></textarea> </p> </body> </html>
アプリを読み込んで、スライドショーを実行したり表示形式を色々変更したりしたところ、ActiveViewChangedイベントは、スライドショー開始時と終了時、閲覧表示開始時と終了時に発生することが分かりました。
VBAで言うところのApplication.WindowSelectionChangeイベントと同じなのかと思っていましたが、どうやら違うようです。
また、getActiveViewAsyncメソッドで取得したビューの状態は、スライドショーや閲覧表示開始時には「read」、終了時には「edit」となっていました。
というわけで、ActiveViewChangedイベントとgetActiveViewAsyncメソッドを使えば、スライドショーの実行時や終了時に何かしらの処理を行うことができそうです。
この記事へのコメントはありません。