MS Powerpoint に貼る

まずコントロールツールボックスを探す。デフォルト非表示だった気がするので"表示"から探さないとダメかも。見っけたら "Shockwave Flash Object" を探してクリック。スライド上でクリック & ドラッグで作る。作ったコントロールの右クリックメニューから"プロパティ"をクリック。

出てきた窓で "Movie" に swf ファイルの場所を指定して、WMode を "Direct" か "gpu" に変える。"Direct" と "gpu" で何が違うのかは知らない。

古いバージョン (0.16 以前) はさらに謎の設定を追加しないと表示できないので、新しいバージョン (0.20 以降) を使うといいです。新しいバージョンのほうがバグとかは大分マシになってます。

ちなみに、新しいバージョン (0.20 以降) でもまだまだまだまだ不備があって、相当バグいです。Flash10 の Watermelon の時のほうが大分安定していたように感じるレベルで。powerpoint2003 でのテストでは flash がハングするケースもあります。ページやマウスのフォーカス切り替えがどうも鬼門です。ボチボチ改善していく予定です。できるかわからんけど。

何も表示されなくなっても、クリックしたりドラッグすると表示が復活することがあります。それでも何も起こらなかったら割とどうにもならないです。ファイルを一旦閉じるか、Movie ファイルを一旦変更してまた変更して元に戻せば flash をまた最初から読み込んでくれるので復活します。あぁ、バグがひどいなぁ。バージョン 2.1 以降に付属した VBA をマネして書けば (README_PPT) Movie ファイルを一旦変更してまた戻すのをページ切り替え時に自動でやります。(バグってたらごめん)かなりまともになりますが、それでもまれに flash player 自体がハングするケースがあるみたいです。この VBA のスクリプトを使えば、flash10 の頃程度には安定そう。

CueMolでまた ActiveX control 使えるようになったみたいなんできっとそっちのほうがマトモだし楽ですwwwww

一応 VBA のスクリプト

  • クラスモジュール, Class.cls
    1. Public WithEvents appevent As Application
    2. Private Sub appevent_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
    3. Dim sld As Slide
    4. Set sld = Wn.View.Slide
    5. Dim s As shape
    6. For Each s In sld.Shapes
    7. If s.Name Like "ShockwaveFlash*" Then
    8. Dim swf As ShockwaveFlash
    9. Set swf = s.OLEFormat.Object
    10. Dim fn As String
    11. fn = swf.Movie
    12. With swf
    13. .Movie = "dummy"
    14. .Movie = fn
    15. .WMode = "Direct"
    16. .FrameNum = -1
    17. .Playing = True
    18. End With
    19. End If
    20. Next
    21. End Sub

この関数はページが切り替わる際に実行され、ページ内の Shockwave Flash Object っぽいものを探して、一旦 Movie プロパティをダミー文字列("dummy")に変更。直後に Movie プロパティを元々のファイルの場所に戻します。ひどいやりかたですが、これで強制的に初期化できるみたいです。

  • 標準モジュール, Module1.bas
    1. Dim myobject As New Class1
    2. Sub startEvents()
    3. Set myobject.appevent = Application
    4. End Sub
    5. Sub stopEvents()
    6. Set myobject.appevent = Nothing
    7. End Sub

実際に使うには、とりあえず powerpoint から VBA エディタを起動。そこでまずクラスモジュールを新規に作り(Class1 という名前になるはず)、上のを書く。次に標準モジュールを作って下のを書く。クラス名が違ってたら適当に直してください。んでもって VBA のエディタを終了。powerpoint に戻って、メニューのマクロに行って、startEvents() を実行すればよかったはず。ちなみに VBA は素人がみようみまねでテキトーに書いたものなんで自己責任でお願いします。